在C中迭代字符串的首选方法是什么?

时间:2012-09-13 11:40:19

标签: c string iteration

    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 个答案:

答案 0 :(得分:7)

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

无需strlen

答案 1 :(得分:2)

如果你有一个以空字符结尾的字符串,即一个字符数组,最后有一个额外的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)
{
     // ...
}

答案 2 :(得分:0)

你可以使用递归,但这并不比上面任何一个好。 :)

答案 3 :(得分:0)

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

char some_string[] = "aeiouy";
char *vowels;
for (vowels=some_string ; *vowels != '\0' ; vowels++) {
    char vowel = *vowels;
    printf("%c\n", vowel);
}