반응형

텍스트 파일에서 특정한 단어를 찾아서 다른 단어로 변경하여 출력 파일에 쓰는 프로그램을 작성하라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
#define ROW 20
#define COL 20
int main(void)
{
    FILE *fpr=NULL;
    FILE *fpw=NULL;
    char tok[ROW][COL];
    char rpl[SIZE];
    char sub[SIZE];
    char line[SIZE];
    char *token;
    int count; int i;
    if((fpr=fopen("origin.txt","r"))==NULL)
    {
        printf("파일오픈실패1\n");
        exit(1);
    }
    if((fpw=fopen("change.txt","a"))==NULL)
    {
        printf("파일오픈실패2\n");
        exit(1);
    }
    printf("바뀔 단어를 입력하세요: ");
    gets(rpl);
    printf("대신 넣을 단어를 입력하세요: ");
    gets(sub);
    while(!feof(fpr))
    {
        fgets(line,SIZE,fpr);
            count=0;
            token=strtok(line," "); //토큰 분리
            while(token!=NULL)
            {
                strcpy(tok[count],token); //토큰을 이차원배열로 삽입
                if(strcmp(tok[count],rpl)==0//이차원배열과 rpl 비교
                {strcpy(tok[count],sub);} //같을시 이차원배열에 sub 삽입
                count++//카운트는 이차원배열 개수 세는데 사용
                token=strtok(NULL," \n"); //연속적 토큰 분리
            }
        for(i=0;i<count;i++)
        {
            strcat(tok[i]," "); //자르는 것으로 공백문자사용 했기에 다시 붙여줘야함
            fputs(tok[i],fpw);
        }
        fputs("\n",fpw); //자르는 것으로 개행문자 사용했으므로 다시 붙여줌
    } //이프로그램은 불완전한데 쉼표나 마침표가 붙어있으면 검색을 하지 못한다.
    fclose(fpr); //그렇다고 자르는 것으로 쉼표를 추가한다고 해도 그 쉼표를
    fclose(fpw); // 제자리에 다시 박아놓는 방법을 찾지 못하였다.(어떤 걸로 잘랐는지 어떻게 구분할까?)
    return 0;
    }
cs




이프로그램은 불안전합니다. 공백문자와 개행문자로 분리된 일반적인 단어는 잡아낼 수 있지만 

쉼표나 마침표가 붙어있는 문자는 잡아낼 수가 없습니다.  더 좋은 방법이 있으면 알려주세요!




반응형
반응형

간단한 "찾아 바꾸기" 기능을 구현하여 보자. 첫 번째로 사용자에게 최대 80 문자의 문자열을 입력하도록 한다. 두 번째로 찾을 문자열을 입력받는다. 세 번째로 바꿀 문자열을 입력받는다. 문자열을 찾아서 바꾼 후에 결과 문자열을 화면에 출력한다.

//개인적으로 최고로 어려웠던 문제네요.. 오래걸렸습니다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <string.h>
#define SIZE 80
int main(void)
{
char a[SIZE]="";
char find[15]="";
char change[15]="";
char seps[]=" ";
char b[10][20];
char *token;
int j,count;
count=0;
printf("문자열을 입력하세요: ");
gets(a);
printf("찾을 문자열: ");
gets(find);
printf("바꿀 문자열: ");
gets(change);
token=strtok(a,seps);
while(token!=NULL)
{
    strcpy(b[count],token);
    count++;
token=strtok(NULL,seps);
}
for(j=0;j<count;j++)
{
if(strcmp(b[j],find)==0)
    {strcpy(b[j],change);
break;}
}
printf("결과: ");
for(j=0;j<count;j++)
{
printf("%s ",b[j]);
}
printf("\n");
return 0;
}
cs




참고로 제 코드 말고도 인터넷에 찾아보니 좋은 코드가 있어서 공유하고자 합니다.

http://blog.naver.com/misoo12/100147994737


반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

포인터 평면 위의 점  (0) 2016.12.27
좌표 일치 확인  (0) 2016.12.27
전광판 만들기  (0) 2016.08.22
문자열로 연산하기  (0) 2016.08.22
구두점 개수 세기  (0) 2016.08.21
반응형

영문 문자열 안에 포함된 영단어의 개수를 계산하여 화면에 출력하는 프로그램을 작성하여 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#define SIZE 80
int main(void)
{
    char a[SIZE]="";
    int i, count;
    count=1;
    printf("문자열을 입력하세요: ");
    gets(a);
    for(i=0;a[i]!=NULL;i++)
        if(a[i]==' ')
            count++;
    printf("단어의 수는 %d입니다.\n", count);
    return 0;
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
#define SIZE 80
int main(void)
{
    char a[SIZE]="";
    char seps[]=" ";
    int count;
    char *token;
    count=0;
printf("문자열을 입력하세요: ");
gets(a);
token=strtok(a,seps);
while(token!=NULL)
{
    count++;
    token=strtok(NULL,seps);
}
printf("단어의 수는 %d입니다.\n", count);
return 0;
 
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

회문(palindrome)  (0) 2016.08.20
문장 교정  (0) 2016.08.20
질문에 대한 답변  (0) 2016.08.20
대소문자 변환기  (0) 2016.08.20
문자열내 문자 빈도수  (0) 2016.08.20

+ Recent posts