C-模式匹配

时间:2017-10-21 18:57:48

标签: c pattern-matching

我正在尝试编写一个无限接收输入的程序,每当输入序列与给定模式匹配时,它应该打印出已找到匹配项并继续搜索我管理的模式的其他事件只是为了编码

   #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;
}

帮助我解决问题

1 个答案:

答案 0 :(得分:2)

问题在于,当某个特定字符(比如输入的第二个1)不符合if(ch==pattern[i])条件时,您会“重置”该模式,但您不会检查已经输入的1 {1}}用于“新”模式检查的开头。请写下以下内容:

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