Вопрос:
Как искать строку в файле? Я хочу сканировать одно слово за раз и сравнивать это с * строкой, как я могу это сделать?
bool searchMatch(char *string, FILE *file){ while(true){ char *buff=fgets(buff, 1024,file); //how to get one word at a time??? printf(«BUFF=%sn»,buff); if(buff == NULL) break; if(strcmp(buff, string) == 0) return true; } return false; } Лучший ответ:
Службы Cddio не имеют представления о том, что такое “слово”. Самое близкое, что вы можете сделать, это использовать fscanf() для чтения последовательностей символов, разделенных пробелами:
int searchMatch(char *string, FILE *file) { char buff[1024]; while (fscanf(file, «%1023s», buff) == 1) { printf(«BUFF=%sn»,buff); if (strcmp(buff, string) == 0) return 1; } return 0; }
Это может или не может выполнить ваше определение слова. Обратите внимание, что такие вещи, как “Пример test123”, интерпретируются как два слова: “Пример” и “test123”.
Кроме того, ваш исходный код никогда не будет работать, потому что вы не выделили место для buff. fgets() не выделяет вам память, buff должен быть указателем на действительный выделенный блок памяти.
Обратите внимание, что условие цикла было изменено так, что оно неявно останавливается, когда доступ к нему больше не доступен – обычно хорошей практикой является то, что циклы останавливаются, когда условие ложно, вместо того, чтобы рассеивать кучу инструкций break в его теле.
Ответ №1
Попробуйте использовать strstr(), она не будет сравнивать слово за словом, но это может помочь вам сказать вам, есть ли string в buff Пример:
If(strstr(buff, string)) return 0;