2017-10-21 6 views
1

입력을 무한히받는 프로그램을 작성하려고하는데, 입력 시퀀스가 ​​주어진 패턴과 일치 할 때마다 매치가 발견되었음을 출력하고 코드를 관리하는 다른 패턴을 계속 검색해야합니다 이C- 패턴 매칭

#include<stdio.h> 
    #include<string.h> 
    int main(){ 
     char ch; 
     char pattern[4]="1234"; 
     int i=0; 
     while(1){ 
     scanf(" %c",&ch); 
     if(ch==pattern[i]){ 
      i+=1; 
     } else { 
      i = 0; 
     } 
     if (i == 4) { 
      printf("match found!\n"); 
      i = 0; 
     } 
     //printf("%c",ch); 
     } 
     return 0; 
    } 

문제는이 코드가 11234와 같은 반복 사례를 처리하지 않는다는 것입니다.

내 다른 접근 방식은

#include<stdio.h> 
#include<string.h> 
int main(){ 
    char ch; 
    char pattern[4]="1234"; 
    char buf[4] = ""; 
    int i=0; 
    while(1){ 
    scanf(" %c",&ch); 
    buf[i%4]=ch; 
    i++; 
    if(strcmp(pattern,buf)==0){ 
     printf("Match found"); 
    } 
    } 
    return 0; 
} 

+0

https://en.wikipedia.org/wiki/String_searching_algorithm – Ryan

+1

[일치 문자열 일치 알고리즘] 그래서 다음 물품 /index.html)은 매우 유용합니다. –

답변

2

문제는 주어진 캐릭터,의 두 번째 1 입력 가정 해 봅시다 때를 이행하지 않는다는 것입니다 문제를 해결 도움말 일부 오류가 버퍼링을 사용 if(ch==pattern[i]) -condition을 사용하면 패턴을 "재설정"하지만 "새"패턴 확인의 시작 부분에 이미 입력 된 1을 입력하지 않을 것입니다. http://www-igm.univ-mlv.fr/~lecroq/string (

else { 
    i = (ch==pattern[0]) ? 1 : 0; 
+0

찾을 패턴이 '1213'이고 입력이 '121213'이면 문제가 될 수 있습니다. 명확하게 일치가 있지만 두 번째 2가 3과 일치하지 않으면 패턴의 시작 부분으로 다시 설정하면 1213을 놓친 것을 의미합니다. –