我正在尝试编写一个接受字符串和单词的函数,并输出它在字符串中出现的次数。
我的出价:
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/