c найти точное слово из строки, начинающейся с "

Я делаю упражнение на 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); 
    }

person Cyrus Leung    schedule 03.11.2016    source источник
comment
(strncmp(position->fruits, "\"Watermelon\"", 10). То есть избегайте символов двойных кавычек. Экранирование — это стандартный способ указания специальных символов в строковом литерале.   -  person kaylum    schedule 03.11.2016
comment
Возможный дубликат Включить двойную кавычку () в C-строку   -  person kaylum    schedule 03.11.2016
comment
В качестве альтернативы удалите кавычки из данных перед сохранением их в связанном списке. Это хорошая идея, если кавычки лучше всего рассматривать как часть форматирования данных, а не как неотъемлемую часть данных.   -  person John Bollinger    schedule 03.11.2016
comment
Если строка Banana/Watermelon/Lemon, то strncmp() не будет соответствовать ей, потому что она начинает совпадать с начала строки. Если вы хотите искать Watermelon в любом месте строки, вам нужно использовать strstr().   -  person Barmar    schedule 03.11.2016
comment
Если вы должны извлечь имя каждого фрукта и посмотреть, было ли оно уже задано, вы можете применить функцию strtok к каждой строке, используя набор разделителей "/\"", который выглядит странно, но содержит два символа-разделителя / и " (второй экранируется, потому что он находится в строке, которая также требует ").   -  person Weather Vane    schedule 03.11.2016
comment
@kaylum Спасибо, попробовал ваш метод, но он не сработал, я сделал это с помощью strstr().   -  person Cyrus Leung    schedule 03.11.2016
comment
@Barmar Большое спасибо, я боролся с этой проблемой 2 часа, и ваш ответ работает отлично !!   -  person Cyrus Leung    schedule 03.11.2016


Ответы (1)


если вы хотите найти одно фруктовое слово, например Watermelon в строке Banana/Watermelon/Lemon, вы не можете сравнивать эти две строки, но вы должны разделить свою строку с помощью этого разделителя / и сравнить слово между двумя разделителями; или вы можете сравнить один символ вашего фрукта со своей строкой.

person F.Guerinoni    schedule 03.11.2016
comment
Спасибо за ваш ответ, моя проблема была решена с помощью strstr(). - person Cyrus Leung; 03.11.2016