c "

2016-11-03 14 views
0

으로 시작하는 문자열에서 정확한 단어를 찾습니다. C 프로그래밍 과정에서 C로 연습을하고 있습니다. 텍스트 파일의 데이터를 링크 된 목록으로 읽고 일치 항목을 찾아 결과를 출력해야합니다.c "

텍스트 파일의

예 :

"Apple/Orange",1 
"Banana/Watermelon/Lemon",2 
"Watermelon/Strawberry",3 
"Orange/Grape/Watermelon",4 
"Blueberry", 5 

는 fgets(), sscanf를() 및 무효 기능을 사용하여 내 연결리스트로를 저장, 그러므로 문자열은 따옴표로 시작됩니다

.

문제는 strncmp()를 사용하여 문자열에서 단어를 찾으려고 할 때 발생하는 것이 었습니다. rk 따옴표로 인해.

말 그대로 인용 부호로 시작되는 문자열에서 정확한 단어를 찾기위한 단서가 어떤 도움이 인정되지 않을 것이라고했다
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; 
} 

, 감사 :

내가 좋아하는 일을했다.

이제 Barmar의 아이디어 덕분에 해결되었습니다. strncmp() 대신 strstr()을 사용하려고했을 때 완벽하게 작동했습니다. 당신이 문자열 Banana/Watermelon/Lemon에서 예를 Watermelon를 들어, 하나의 과일 단어를 검색하려면

if(strstr(position->fruits, "Watermelon")){ 
    printf("%s, %d\n", position->fruits, position->number); 
    } 
+0

'(strncmp (position-> fruits, "Watermelon \" ", 10)'. 즉 이스케이프는 문자열 리터럴에 특수 문자를 지정하는 표준 방법입니다. – kaylum

+0

가능한 중복 of [큰 따옴표 (")를 C-string에 포함] (0120-385-301) – kaylum

+0

또는 데이터에서 따옴표를 제거하십시오. 연결된 목록에 저장하십시오. 따옴표가 데이터의 필수 부분이 아닌 데이터 형식화의 일부로 가장 적절하게 고려되는 경우 좋은 생각입니다. –

답변

0

, 당신은 두 문자열을 비교할 수 없습니다하지만 당신은이 구분 /로 문자열을 분할하고 두 개의 분리 사이에 단어를 비교해야합니다; 또는 과일의 한 문자와 문자열을 비교할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 내 문제는 strstr()을 사용하여 해결되었습니다. –