Возможно, у вас есть рабочий код для настройки вашего связанного списка.Простая функция подсчета того, как часто встречается одна буква, будет выглядеть так:
int count_chars(node *nodePtr, char findme)
{
int occurrences = 0;
while (nodePtr) {
if (nodePtr->character == findme) {
occurrences++;
}
}
return occurrences;
}
(Примечание. Я решил передать головной узел функции вместо использования глобального указателя головы.позволяет вам иметь более одного связанного списка в вашей программе. Это означает, что вы можете даже реализовать свое поисковое слово "Ian" в качестве связанного списка.)
Вместо того, чтобы искать строку в любом месте списка, давайте сначала напишемнекоторый код, который проверяет, начинается ли связанный список с определенного слова.Пройдите по списку и по строке одновременно и проверьте на несоответствия.Поскольку мы требуем, чтобы все строки, но не весь список соответствовали, мы контролируем цикл с помощью строки:
int startswith(node *nodePtr, const char *findme)
{
while (*findme) {
if (nodePtr == NULL || *findme != nodePtr->character) {
return 0; // mismatch!
}
nodePtr = nodePtr->nextNode; // next node in list
findme++; // next char in string
}
return 1; // all chars match
}
Но вы хотите найти строку где угодно, а не только в начале.Каждый узел в списке можно считать головным узлом подсписка, который начинается на этом узле.Таким образом, если ваш список содержит «cat», узлы в списке содержат подсписки «cat», «at» и «t» соответственно.С помощью функции выше вы можете проверить свое слово на каждом узле.Код выглядит очень похоже на первый фрагмент кода выше, где мы только что подсчитали символы.
int count_strings(node *nodePtr, const char *findme)
{
int occurrences = 0;
while (nodePtr) {
if (startswith(nodePtr, findme)) {
occurrences++;
}
}
return occurrences;
}
Одно замечание о разработке кода: не пытайтесь все делать в своей функции.Если искомая строка получена из пользовательского ввода, не включайте ее в функцию.Вместо этого сделайте это отдельно: прочитайте ввод, затем проверьте этот ввод с помощью count_strings
.Таким образом, ваша функция может использоваться в других контекстах, а не только в вашем специализированном случае.(То же самое можно сказать более или менее для передачи в головной узел в качестве параметра.)