複数の文字列の配列

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Heart

複数の文字列の配列

#1

投稿記事 by Heart » 14年前

初投稿となります。プログラミング初心者です。
学校で出された課題で困っており、自分で調べてみたりしたのですが理解し難かった & 締め切りが迫っているため みなさまのお力をおかりしたく投稿させていただきました。あらかじめ用意してある文字列の配列を逆文字(文字列を逆順に格納)かつ大文字で表示するという課題を出題されました。
例えばそのプログラム内に

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言語開発環境

長文失礼いたしました。

初級者
記事: 200
登録日時: 15年前

Re: 複数の文字列の配列

#2

投稿記事 by 初級者 » 14年前

コード:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

void ar(char (*s)[5], int n)
{
    int i, j;

    for (i = 0; i < n; i++) {
        printf("st[%d]=\"", i);
        for (j = strlen(s[i]) - 1; j >= 0; j--) {   // 逆順
            putchar(toupper(s[i][j]));
        }
        printf("\"\n");
    }
}

int main(void)
{
    char s[][5] = { "Abcd", "Ef", "Gh", "Ijk" };

    ar(s, sizeof(s) / sizeof(s[0]));
    return 0;
}

Heart

Re: 複数の文字列の配列

#3

投稿記事 by Heart » 14年前

初級者さんのをコンパイルしてみたところ、無事コンパイルできました。しかしstrlen関数(文字列の長さを求める関数)についてまだ学んではいないため1つの参考にし自分でもう一度プログラムを組みなおしてみようと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る