~cpp int nfind(char *strstr,char *ptnptn) { int str_len=strlen(str); // 문자열의 길이 int ptn_len=strlen(ptn); // 패턴의 길이 int str_count=0; // 카운터 int ptn_count=0; while(1) { if(strstr[str_count]==ptnptn[ptn_count]) // 문자 비교해서 같을때 { ptn_count++; // 패턴과 스트링을 가르키는 걸 한개 증가 str_count++; } else { if(ptn_count==0) str_count++; ptn_count=0; // 다를때는 패턴은 0으로 } if(ptn_count==ptn_len) // 패턴이 문자열 내에 있을때 그 시작 위치 리턴 return str_count-ptn_len+1; else if(str_count==str_len) // 패턴이 문자열 내에 없을때 거짓(다 돌았는데 카운트가 return -1; // 완성 되지 않았을떄 } }
j | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
pattern | a | b | c | a | b | c | a | c | a | b |
f(j) | -1 | -1 | -1 | 0 | 1 | 2 | 3 | -1 | 0 | 1 |