Я делаю упражнение на C для моего курса программирования на C. Мне нужно прочитать данные из текстового файла в связанный список и найти совпадения, а затем распечатать результат.
Пример текстового файла:
"Apple/Orange",1
"Banana/Watermelon/Lemon",2
"Watermelon/Strawberry",3
"Orange/Grape/Watermelon",4
"Blueberry", 5
Сохранил их в свой связанный список, используя fgets(), sscanf() и функцию void, поэтому строка будет начинаться с кавычки.
Проблема в том, что когда я пытался использовать strncmp() для поиска слова из строки, это не сработало из-за кавычек.
Я сделал что-то вроде:
void findFruits(List *list){
Node *position = list->first;
while(position != NULL){
if(strncmp(position->fruits, "Watermelon", 10)==0){
printf("%s, %d\n", position->fruits, position->number);
}
position = position->next;
}
Я буквально понятия не имею, как найти точное слово из строки, начинающейся с кавычки, любая помощь будет оценена по достоинству, спасибо.
Решено сейчас, благодаря идее Бармара. Это сработало отлично, когда я попытался использовать strstr() вместо strncmp().
if(strstr(position->fruits, "Watermelon")){
printf("%s, %d\n", position->fruits, position->number);
}
(strncmp(position->fruits, "\"Watermelon\"", 10)
. То есть избегайте символов двойных кавычек. Экранирование — это стандартный способ указания специальных символов в строковом литерале. - person kaylum   schedule 03.11.2016Banana/Watermelon/Lemon
, тоstrncmp()
не будет соответствовать ей, потому что она начинает совпадать с начала строки. Если вы хотите искатьWatermelon
в любом месте строки, вам нужно использоватьstrstr()
. - person Barmar   schedule 03.11.2016strtok
к каждой строке, используя набор разделителей"/\""
, который выглядит странно, но содержит два символа-разделителя/
и"
(второй экранируется, потому что он находится в строке, которая также требует"
). - person Weather Vane   schedule 03.11.2016