【问题标题】:C code for counting number of occurrences of a word in string用于计算字符串中单词出现次数的C代码
【发布时间】:2019-02-21 23:27:17
【问题描述】:

我正在尝试编写一个接受字符串和单词的函数,并输出它在字符串中出现的次数。

我的出价:

int CountWord(char *s, char *word) {
    char first = word[0];
    int i, j, count = 0;
    while (s[i] != '\0') {
        if (s[i] == first)
            for (j = 1; (s[i+j] == word[j]) && (word[j] != '\0') && (s[i+j] != '\0'); ++j) {
                if (word[j] == '\0')
                    ++count;
        }
    }
    return count;
}

问题:它不适用于“代码块”。

提前感谢您的帮助。

【问题讨论】:

  • 你在使用之前还没有初始化i。你永远不会增加它。

标签: c string loops while-loop


【解决方案1】:

您的代码存在多个问题:

  • 你没有初始化i
  • 你不增加i
  • for 循环中的测试 (word[j] != '\0') 阻止计数代码执行。
  • 在字符串末尾找不到匹配项
  • 如果word 是空字符串,则计数将不正确。
  • int 在某些架构上可能没有非常长的字符串所需的范围。

这是一个更正的版本:

size_t CountWord(const char *s, const char *word) {
    char first = word[0];
    size_t i, j, count = 0;

    if (first == '\0')
        return strlen(s) + 1;

    for (i = 0; s[i] != '\0'; i++) {
        if (s[i] == first) {
            for (j = 1; word[j] != '\0' && s[i + j] == word[j]; j++)
                continue;
            if (word[j] == '\0')
                count++;
        }
    }
    return count;
}

请注意,此实现将为CountWord("aaa", "aa") 返回2,这可能是也可能不是预期结果。规范必须准确,并说明是计算 word 的重叠出现还是仅计算非重叠匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-07
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2021-01-09
    • 2016-02-11
    相关资源
    最近更新 更多