迭代C字符串不起作用

时间:2012-07-16 23:40:25

标签: c string iteration

首先,我对这段代码的目标是:将一个句子放入一个C字符串中。遍历句子,查看特定字母的实例数。

这段代码有点工作但没有给出正确的数字?不确定原因:

#include <stdio.h>
#include <string.h>

int tracker=0;
int letterCount (char *sentence)
{
    int s=strlen(sentence);
    int i=0;


    for (i=0; i<s; i++){
        if (sentence[i]=='h') {
            tracker++;
        }
    }
    return tracker;
}

int main(int argc, const char * argv[])
{

    char *string="Hi there, what's going on? How's it going?";


    letterCount(string);

    printf("this sentensce has %i H's", tracker);


    return 0;
}

我得到的输出:

this sentensce has 2 H's

不太对劲。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

如果你的意思是不区分大小写的H:

,这是正确的代码
#include <stdio.h>
#include <string.h>

int tracker=0;
int letterCount (char *sentence)
{
    int s=strlen(sentence);
    int i=0;


    for (i=0; i<s; i++){
        if (sentence[i]=='h' || sentence[i]=='H') {  //'h' is not the same as 'H'
            tracker++;
        }
    }
    return tracker;
}

int main(int argc, const char * argv[])
{

    char *string="Hi there, what's going on? How's it going?";


    letterCount(string);

    printf("this sentensce has %i H's", tracker);


    return 0;
}

你刚刚在代码中拼错了小写和大写字母。 请记住,C语言区分大小写!

答案 1 :(得分:0)

虽然您的标签谈到了H的数量,但您的letterCount代替了h - 而且在我看来,您提供的输入确实有两个小写h的实例,就像它说的那样。

如果您想将它们统计在一起,您可以考虑使用tolowertoupper过滤每个输入,然后再检查您的内容。

答案 2 :(得分:0)

这个数字对我来说是正确的:你在那句话中有2'h'字符。如果你想计算'H'字符,那么你需要单独检查。

答案 3 :(得分:0)

size_t letterCount(const char* sentence, char c)
{
  size_t count = 0;

  while(sentence)
  {
    count += (*sentence == c);
    ++sentence;
  }

  return count;
}

我们在这看到什么?

  • 您不能有负数,因此请使用无符号类型,例如size_t
  • 句子不应该被修改,所以它应该是const
  • 传入您想要匹配的字符
  • 句子是一个指针,如果它是null,你就完成了。不需要调用strlen。
  • 句子是一个指针,实际指针是按值传递的,所以你可以修改它(看增量,不需要做额外的变量)
  • 布尔运算符返回1或0,因此不需要使用if。 (虽然,我没有看过程序集,看看if分支或添加0是否更便宜.YMMV)