学校で出された課題で困っており、自分で調べてみたりしたのですが理解し難かった & 締め切りが迫っているため みなさまのお力をおかりしたく投稿させていただきました。あらかじめ用意してある文字列の配列を逆文字(文字列を逆順に格納)かつ大文字で表示するという課題を出題されました。
例えばそのプログラム内に
char s[][5] = {"Abcd", "Ef", "Gh","Ijk"}; と記述してあるならば 実行結果に
st[0] = "DCBA"
st[1] = "FE"
st[2] = "HG"
st[3] = "KJI"
と表示させるもので、この char s[][5] = {"Abcd", "Ef", "Gh","Ijk"};は初期設定であり、変更できないように制限がついています。
ar(s,4)と入力すると警告のassignment from incompatible pointer typeが表示されてしまいます。(使用するコンパイラによっては警告は表示されない&型が完全に一致していないため警告が出てると思います。)
授業ではポインタに関してまだ扱っていないためar((const char(*)[5])s, 4);を使うことで無視するように言われたのですが,以下のプログラムに逆文字と大文字の関数を組み込む際に同じようなエラーが出たり、"Abcd"のみ適応されたりと,
とても無視できるようにはなりませんでした。
条件としてtoupper関数(英小文字を大文字に変更するもの)を使用してよいとのことです。(ヘッダ:#include <ctype.h>)
toupper関数をどのように全ての配列に適用させるか、複数の文字列を逆順に格納させる方法が分かりません。
以下のプログラムに複数の文字列を逆順に格納させるものとtoupper関数を全ての配列に適用させたいのですが・・。
#include <ctype.h>
#include <stdio.h>
void ar(const char st[][5], int n)
{
int i;
for(i = 0; i < n; i++)
printf("st[%d]=\"%s\"\n", i, st[i]);
}
int main(void)
{
char s[][5] = {"Abcd", "Ef", "Gh","Ijk"};
ar((const char(*)[5])s, 4);
return (0);
}
OS : Windows
使用コンパイラ:学習用C言語開発環境
長文失礼いたしました。