1
    char *vowels = "aeiouyæøå";
    int len = strlen(vowels);
    int counter;
    for (counter = 0; counter < len; counter++) {
        char vowel = *vowels++;
        printf("%c\n", vowel);
    }

または

    char *vowels = "aeiouyæøå";
    int len = strlen(vowels);
    int counter;
    for (counter = 0; counter < len; counter++) {
        char vowel = vowels[counter];
        printf("%c\n", vowel);
    }

それとももっと良い方法はありますか?

4

4 に答える 4

7
char c;
while ( c = *(vowels++) )
{
}

の必要はありませんstrlen

于 2012-09-13T11:41:39.190 に答える
2

nullで終了する文字列、つまり文字配列があり、最後に0x00バイトが追加されている場合は、次を使用できます。

char *foo = "some string";
char *c = foo;
while(*c)
{
     // ...
     ++c;
}

興味深い副次的事実:定数(例char *foo = "some string")として割り当てられた文字列は、常にnullで終了する必要があります。

コード数を減らすために読みやすさを犠牲にしたい場合は、次のこともできます。

char *foo = "some string";
char *c;
for(*c = foo; *c; ++c)
{
     // ...
}
于 2012-09-13T11:44:39.813 に答える
0

再帰を使用することはできますが、それは上記のどれよりも優れているとは言えません。:)

于 2012-09-13T11:41:46.730 に答える
0

これは関数で使用できます。文字列の最後に「\0」が必要であり、文字列を2回トラバースする必要がないことを明確にできるので、気に入っています。

char some_string[] = "aeiouy";
char *vowels;
for (vowels=some_string ; *vowels != '\0' ; vowels++) {
    char vowel = *vowels;
    printf("%c\n", vowel);
}
于 2012-09-13T11:49:46.193 に答える