我正在尝试编写一个接受字符串和单词的函数,并输出它出现在字符串中的次数。
我的出价:
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;
}
问题:它不适用于“代码块”。
提前感谢您的帮助。
答案 0 :(得分:2)
您的代码中存在多个问题:
i
i
(word[j] != '\0')
循环中的测试for
阻止了计数代码的执行。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;
}
请注意,此实现将为2
返回CountWord("aaa", "aa")
,这可能是预期的结果,也可能不是预期的结果。规范必须准确,并告诉您是要计算word
的重复出现还是仅对不重叠的匹配进行计数。