패턴을 스트링에서 찾아
패턴과 스트링이 맞는 부분의 개수 맞는부분의 스트링 인덱스
를 출력하는코드를 작성하고 현재 바탕화면에 reault.txt, string.txt, pattern.txt 세 개를 저장해둔 상태입니다. 두번째파일에는 예시로 "Hello world my name is world", 세 번째 파일에는 예시로 world가 있어서 현재 파일 입력은 매우 잘되는 상태입니다. 실제로도 코드 내의 변수 stack에는 2가 들어가고 패턴이 맞는 부분의 인덱스인 6, 23도 printf로하면 잘 출력되던데, 이상하게 result.txt에는 왜 아무것도 출력이 안되는지 모르겠습니다ㅜ
#include <stdio.h>
#include <string.h>
#define CMAX 10000000
#define PMAX 3000
int stack=0;
char space=' ';
char str[CMAX], pat[PMAX];
int stack_2[PMAX];
int nfind(char*, char*);
int main(){
FILE *fp=fopen("string.txt", "rt");
FILE *fp2=fopen("pattern.txt", "rt");
fgets(str, CMAX, fp);
fgets(pat, PMAX, fp2);
for(int i=0;i<PMAX;i++)
stack_2[i]=-1;
nfind(str, pat);
int S;
S=stack;
FILE *fp3;
fp3=fopen("result.txt", "wt");
if(fp3==NULL)
{
printf("failed\n");
return 1;
}
fprintf(fp3, "%d\n", stack);
while(stack>0)
{
fprintf(fp3, "%d ", stack_2[stack-1]);
fprintf(fp3, "%c", space);
stack--;
}
fclose(fp);
fclose(fp2);
fclose(fp3);
return 0;
}
int m=0;
int nfind(char *string, char *pat)
{
int i, j, start=0;
int n;
int lasts=strlen(string)-1;
int lastp=strlen(pat)-1;
int endmatch=lastp;
for(i=0;endmatch<=lasts;endmatch++, start++){
if(string[endmatch]==pat[lastp])
{
for(j=0, i=start;j<=lastp&&string[i]==pat[j];i++)
{
j++;
}
}
if(j==lastp+1)
{
stack_2[m]=start;
m++;
stack++;
j=0;
}
else
continue;
}
return 0;
}