간단한 파일 입출력 질문입니다
조회수 543회
패턴을 스트링에서 찾아
패턴과 스트링이 맞는 부분의 개수 맞는부분의 스트링 인덱스
를 출력하는코드를 작성하고 현재 바탕화면에 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;
}
1 답변
-
result.txt
를 만들어놓고 실행했는데 아무것도 안 써진다면 아주 높은 확률로… 문제는 코드가 아니라 권한 및 파일 처리 부분에 있습니다.기본적으로 파일을 작성하는 프로그램은:
- 출력 대상 파일이 없으면 그걸 만들 수 있어야 하며, 그 파일의 위치(디렉토리) 역시 없으면 만들 수 있어야 합니다.
- "기존의 출력을 덮어쓰는 출력"을 방지해야 합니다. appending하거나, 항상 새 파일을 만들거나.
- 출력 대상 파일 경로에 대한 쓰기 권한이 있어야 합니다.
즉, 이 코드는
result.txt
를 만들어놓지 않은 상태에서도 돌아야 하는 겁니다.result.txt
를 삭제하신 다음 다시 실행해 보세요. 만약 permission 어쩌구 하는 에러가 뜬다면, 지금 돌리고 계신 자바 애플리케이션이 문제의 경로에 쓰기 권한이 있는지 확인해 주세요.
댓글 입력