#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *fin, *fout; char line[100]; int i, j, x, y; fin=fopen("input.txt", "r"); if(fin==NULL) { printf("input.txt 파일을 읽을 수 없습니다."); exit(1); } fout=fopen("output.txt", "w"); if(fout==NULL) { printf("out.txt 파일에 쓸 수 없습니다."); exit(1); } // 한줄을 읽어 들입니다. while((fgets(line, 100, fin))!=NULL) { // 앞에서 부터 가면서 널문자가 나올 때 까지 i의 값을 증가 시킵니다. // 맨 뒤에는 줄바꿈 문자가 들어 있습니다. 줄바꿈 문자 앞까지에 단어가 들어 있습니다. i=0; while(line[i]>0) i=i+1; // 널문자 앞으로 가기 위해서 1을 뺍니다. 만약 줄바꿈 문자가 있다면 1을 더 빼 줍니다. i=i-1; if(line[i]=='\n') i=i-1; // 뒤에서 부터 앞으로 가면서 빈칸을 찾습니다. while(i>0) { // i번째 까지 출력을 해야 하기 때문에 경계값으로 i+1을 줍니다. y=i+1; // 맨 앞에 가거나, 빈칸을 찾을 때 까지 앞으로 갑니다. while(i>0&&line[i]!=' ') i=i-1; // 빈칸을 만났다면 빈칸 다음 부터, 아니면 0번째 칸부터 출력을 합니다. if(i>0) x=i+1; else x=0; // 한글자씩 출력을 합니다. for(j=x;j<y;++j) fprintf(fout, "%c", line[j]); // 가장 앞의 단어의 경우를 제외하고는 빈칸을 출력합니다. if(x>0) fprintf(fout, " "); // 앞으로 이동해야 합니다. 잊으면 무한 루프에 걸립니다. i=i-1; } // 줄바꿈을 출력해 줍니다. fprintf(fout, "\n"); } fclose(fin); fclose(fout); return 0; }
'c·c++ > c 프로그래밍' 카테고리의 다른 글
중복된 단어 지우기 (0) | 2012.06.14 |
---|---|
strdup 활용하기 (0) | 2012.06.13 |
수치해석-뉴톤메쏘드 (0) | 2012.06.13 |
.smi 파일에서 영어만 추출하기. (0) | 2012.06.11 |
threaded binary tree (0) | 2012.06.09 |