c·c++/c 프로그래밍

한줄의 단어를 역순으로 출력하기

바로이순간 2012. 6. 13. 11:27

#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