计算字符串中某个单词出现次数的C代码

标签 c string loops while-loop

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

我的出价:

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
  • 你不增加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 的重叠出现次数还是仅计算非重叠匹配项。

关于计算字符串中某个单词出现次数的C代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52377888/

相关文章:

c - 无法理解或修复程序中的竞争条件

java - 删除每次迭代中的连续字符显示意外错误

java - 字符串匹配问题?

php - 如何在PHP中计算总记录并重复主div 3次

c - 使字符串比较函数更简短

c - 运行时检查失败 #2 - 变量 'd' 周围的堆栈已损坏

html - NSAttributedstring 到 HTML

java - 扫描仪不等待 NewLine 通过循环收集输入

java - 如何重新提示允许用户继续转换值?

c - 为什么 popen() 调用 shell 来执行进程?