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")应始终以空值结尾。

如果您想牺牲可读性以减少代码行数,您还可以执行以下操作:

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

这可以在函数中使用,我喜欢它,因为我认为它清楚地表明存在,并且必须在字符串的末尾有一个 '\0',也没有遍历字符串两次:

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 回答
0

您可以使用递归,但这并不比上述任何方法好。:)

于 2012-09-13T11:41:46.730 回答