В вашем коде несколько проблем:
- вы не инициализируете
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
или просто не перекрывающиеся совпадения.