C循环没有正确迭代字符串

时间:2017-05-12 05:47:48

标签: c string loops iteration

我使用以下方法迭代字符串:

char is_words(char *word)
{
  if (word != NULL) {
    for (int i = 0; i<strlen(word)-1; i++) {
      char c = word[i];
      printf("c is: %c\n", c);
      if (!isalpha(c) || !isspace(c)) {
        return c;
      }
    }
  }
  return 'a';
}

然而,当使用它时,它只会输出&#34; c是X&#34;,其中X是字符串的第一个字母。为什么不迭代整个字符串?

3 个答案:

答案 0 :(得分:1)

它返回此行中的C

 if (!isalpha(c) || !isspace(c)) {
        return c;
 }

函数在返回值

后完成执行

了解如何使用&amp;&amp;和||

一些解释

如果c是abc符号 - isalpha(c) = true , isspace(c) = false

true || false = true

如果c是空格符号

isalpha(c) = false , isspace(c) = true

false || true = true

如果c为数字,则会出现错误并打印1个符号

答案 1 :(得分:0)

1。替换这段代码:

if (!isalpha(c) || !isspace(c)) {
    return c;
}

with:

if (!isalpha(c) && !isspace(c)) {
    return c;
}
如果以下条件的 为真,您想要返回

  • c不是字母字符
  • c不是空格

你的条件现在返回一个字符(并因此结束该功能) 如果它不是字母 如果不是空格。因此,通过给出一串字母,函数会将它们视为非空格,因此将返回第一个字符。

2。也替换循环条件:

for (int i = 0; i<strlen(word)-1; i++) 

with:

for (int i = 0; i < strlen(word); i++) 

通过检查最多strlen(word)-1的字符,您不会检查最后一个字符。

答案 2 :(得分:-2)

好的,你想做什么 如果你只打印字母, 将退货换成&#34;继续&#34;