2
  1. 以下の文字列の長さと配列サイズを取得するにはどうすればよいですか?

    char str [] = {};

        str[0] = "He";
        str[1] = "llo";
        str[2] =  " Wor";
        str[3] ="ld";
    

  2. そして、どうすればそれらを多次元配列に保存できますか?したがって、この配列は次のようになります。

    charstrstr[strのサイズ][strの文字列の長さ];

strstr[][]array-dimensionsは、
1。strの配列要素の数 と2.str
内のすべての文字の数である必要があります。の場合 strstr[3][1]、これは「d」になります。そもそもstr
-array を初期化せずにそれは可能でしょうか?


[編集]なるほど、の2番目の次元はstrstr意味がありません。 [/ edit]*strの文字の完全な数ではなく、からのすべての要素の長さである必要があります。*str

4

4 に答える 4

5

これはおそらくあなたが望むことをするでしょう、しかしそれはあなたが正確にあなたが求めたものではありませんでした。

#include <stdio.h>

char *strs[] = {
    "foo",
    "bar",
    "bazy"
};

int main() {
    printf("%d - %s\n", strlen(strs[0]), strs[0]);
    printf("%d - %s\n", strlen(strs[1]), strs[1]);
    printf("%d - %s\n", strlen(strs[2]), strs[2]);
    return 0;
}

出力

3 - foo
3 - bar
4 - bazy

配列の配列を格納する可能性はごくわずかであることに注意してください。このソリューションが行うことを実行する(配列へのポインターの配列を作成する)か、大きな配列内の配列の「圧縮された」リストを作成するか、または過度に大きな2次元配列を作成することができます。


「圧縮された」配列は次の形式を取ります。

char strs[] = "foo\0bar\0bazy"; // array is {f,o,o,\0,b,a,r,\0,b,a,z,y,\0}

この形式の問題は、最初の要素の後にあるものにアクセスするのがやや難しいことであり、通常は配列を直線的に検索する必要があります。(または、アドレスの個別のテーブルを保持する...最初のソリューションのように)


2次元配列では、すべてのサイズを指定する必要があり、次のようになります。

char strs[3][5] = {
   "foo",
   "baz",
   "baxy"
};

int main() {
    printf("%d - %s\n", strlen(strs[0]), strs[0]);
    printf("%d - %s\n", strlen(strs[1]), strs[1]);
    printf("%d - %s\n", strlen(strs[2]), strs[2]);
    return 0;
}

これはおそらく次のようにメモリに配置されます。

{f,o,o,\0,*,b,a,z,\0,*,b,a,x,y,\0} (the *'s could be anything, most dependent on your compiler)

コンパイラは、各文字列が正確に5バイトかかることを認識しているため、後の要素の場所を簡単に計算できます。

于 2013-03-19T15:50:03.273 に答える
2

Cで配列を宣言するときは、初期化値を同時に指定しない限り、そのサイズを宣言する必要があります。これは、配列がメモリ内に順番に配置されるため、コンピュータは確保するスペースの量を知る必要があるためです。

さらに、文字列の配列ではなく、文字char str [] = {....}の配列を宣言します。文字列は文字の配列であるため、単一の文字列です。str

文字列の配列を作成するには、次のようなことを行う必要があります。

char strs[num_of_strings][max_length_of_strings+1];
strcpy(strs[0],"string1");
strcpy(strs[1],"string2");
...

この質問では、他のオプションについてさらに詳しく説明しています。

指定しているmax_length_of_stringsが、保証できないソース文字列からのコピーがより短い場合は、の代わりにmax_length_of_stringsを使用します。その場合、結果の文字列がnullで終了することも確認する必要があります。これは、ループすることで実行できます。strncpystrcpy

strs[i][max_length_of_strings] = '\0';

nullで終了する文字列の長さを取得するには、関数を使用しますstrlen

あなたの質問の2番目の部分に関しては、上記はより高次元の配列を作成する方法を明確にするはずです。詳細を説明しますが、このアレイに何をさせたいのか正確にはわかりません。「str内のすべての文字の数」とは、配列に格納されている文字列の最大長を意味しますstrsか?

もしそうなら、あなたはそれについて心配する必要はありません。strs上で説明したように配列をプログラミングすると、すでにこの機能が提供されます。文字列は単なる配列であるため、文字char列にインデックスを付けるのと同じ方法で文字列にインデックスを付けることができますchar

上記のいずれかが明確でない場合はお知らせください。より適切に説明するよう努めます。

于 2013-03-19T15:59:12.643 に答える
1

実際の配列が必要な場合は、次のようになります。

    char str[4][5];  // holds up to 4 characters in each
    strcpy(str[0], "He");
    strcpy(str[1], "llo");
    strcpy(str[2], " Wor");
    strcpy(str[3], "ld");
于 2013-03-19T15:53:35.780 に答える
0

Cで文字列の長さを取得するには、文字列を使用strlenして渡します。

int len = strlen(array[0]);
于 2013-03-19T15:47:50.540 に答える