2014-11-20 17 views
5

Tôi là một người nghiệp dư hoàn toàn khi nói đến C và tôi đã gặp một số sự cố khi cố gắng viết đoạn mã này. Tôi muốn nó kiểm tra các tập tin văn bản cho bất kỳ dòng nào phù hợp với chuỗi đã cho.Tìm kiếm tệp văn bản cho chuỗi phù hợp

Ví dụ: nếu "stackoverflow" nằm trong tệp văn bản và chuỗi tôi đã nhập là "www.stackoverflow.com", nó sẽ trả lại kết quả trùng khớp.

Nhưng hiện tại, nó đang tìm kiếm chuỗi bên trong tệp văn bản, điều này ngược lại với những gì tôi muốn. Tôi sẽ đánh giá cao bất kỳ gợi ý/mẹo!

int Check(char *fname, char *str) { 
FILE *file; 
int i = 1; 
int r = 0; 
char temp[1000]; 

if((file = fopen(fname, "r")) == NULL) { 
    return(-1); 
} 

while(fgets(temp, 1000, file) != NULL) { 

    if((strstr(temp, str)) != NULL) { 
     printf("Host name found on line: %d\n", i); 
     printf("\n%s\n", str); 
     r++; 
    } 
    i++; 
} 

if(r == 0) { 
    printf("\nHost name not blocked.\n"); 
} 

if(file) { 
    fclose(file); 
} 
return(0); 
} 
+2

Xin chào, chào mừng bạn đến với StackOverflow! Bạn đã thử chuyển 'strstr (temp, str)' với 'strstr (str, temp)'? –

+0

Có, nhưng khi tôi thử rằng tôi sẽ không nhận được kết quả nào ngay cả khi các chuỗi tôi so sánh giống hệt nhau. – Piglet

+3

Hãy ghi nhớ 'fgets' chụp một dòng mới (' \ n'); bạn có thể cần phải tự cởi bỏ. –

Trả lời

1

Tại sao không sử dụng getline() để nhận bộ đệm theo dòng và sau đó thực hiện strstr() trong bộ đệm đó?

+0

Có lẽ vì [nó không phải là chức năng của Thư viện chuẩn C] (http://stackoverflow.com/questions/13112784/undefined-reference-to-getline-in-c). – usr2564301

Các vấn đề liên quan