Как узнать есть ли строка в строке используя циклы?
Всем доброго времени суток! Есть задача, на вход которой подается строка из слов которые отделены запятыми и слово-ключ. Суть заключается в том чтобы узнать есть ли это слово-ключ в строке используя циклы, ну или же какие-то другие варианты, но запрещено использовать библиотечные функции для работы со строками. Сам цикл ну или же так сказать главный работающий алгоритм программы нужно записать в отдельную функцию. Код прилагаю ниже:
#include <stdio.h>
int func(char str[128], char key[128]);
int main() {
char str[128], key[128];
char IsThereOrNot;
printf("Enter the key-word:");
gets_s(key, sizeof(key));
printf("Enter the string, please: ");
gets_s(str, sizeof(str));
IsThereOrNot = func(str, key);
printf("%d", IsThereOrNot);
return 0;
}
int func(char str[128], char key[128]) {
int i = 0, n, word = 0, max_word = 0;
while (str[i] != 0) {
if (str[i] == ',') {
i++;
continue;
}
}
return ;
}
Ответы (1 шт):
Автор решения: Sergey
→ Ссылка
я не понимаю сам алгоритм проверки наличия слова в строке
Я бы написал нечто вроде:
// Перебирает слова в строке и возвращает количество совпадений
int func(char str[128], char key[128]) {
int count=0;
int rc;
char *word = str;
char *next_word = str;
while (*next_word != '\0') {
next_word = next(word);
rc = check_eq(word, key);
if (rc !=0) count++;
word = next_word;
}
return count;
}
// Выдаёт указатель на первый символ за концом слова
// Концом слова считается пробел или ноль-терминтор строки
// Первый символ НЕ входящий в слово заменяет терминатором '\0'
char *next(char *cp) {
while ( (*cp != ' ') && (*cp != '\0') cp++;
*cp = '\0';
cp++;
}
// Проверяет слова на совпадение
int check_eq(char *word, char *key {
int l1=0, l2=0, j;
while (word[l1] != '\0') l1++;
while (key[l2] != '\0') l2++;
if (l1 != l2) return 0; // Слова должны быть равной длины
for(j=0; j<l1; j++) if (word[j] != key[j]) return 0; // Слова не совпадают
return 1; // Слова совпали
}
ПРЕДУПРЕЖДЕНИЕ: Писал "навскидку" и ни разу не проверял. Только в куачестве идеи.