홈 > IT > IT정보
IT정보

C언어 함수, 포인터, 동적할당 문제풀기 4-20

3 realdragonhead 3 188 1 0

4-20. 문자열 중 공백 문자, 콤마, 마침표를 제외한 문자의 수를 세는 함수를 작성하고, main() 함수에서 이 함수를 호출하여 결과를 출력하시오.

<CODE>

#include <stdio.h>
#include <stdlib.h>
#define size 100


void strcounter_withexcep(char * , int );
void main() {
        char * usrinput = (char *)malloc(sizeof(char)*size);
        char temp;
        int count = 0, strlength;


        puts("문자열을 입력하면 공백문자, 콤마, 마침표를 제외한 문자의 수를 셉니다.");
        fputs("문자열 입력 : ",stdout);


        while(1) {
                if(count == size) {
                        usrinput[count-1] = '\0';
                        while(getchar()!='\n');
                        strlength = count-1;
                        break;
                }
                temp = getchar();
                if(temp == '\n') {
                        usrinput[count] = '\n';
                        strlength = count;
                        break;
                }
                usrinput[count]=temp;
                count ++;
        }


        strcounter_withexcep(usrinput, strlength);
}


void strcounter_withexcep(char * finput, int length) {
        int indexcont = 0, minuscont=0;


        while(indexcont<length) {
                if(finput[indexcont]==' '||finput[indexcont]==','||finput[indexcont]=='.') {
                        indexcont++;
                        minuscont++;
                        continue;
                }
                indexcont++;
        }
        printf("결과 : %d\n", indexcont-minuscont);
}


<RESULT>

[case 1]

문자열을 입력하면 공백문자, 콤마, 마침표를 제외한 문자의 수를 셉니다.

문자열 입력 : abc.

결과 : 3

[case 2]

문자열을 입력하면 공백문자, 콤마, 마침표를 제외한 문자의 수를 셉니다.

문자열 입력 : , .

결과 : 0

[case 3]

문자열을 입력하면 공백문자, 콤마, 마침표를 제외한 문자의 수를 셉니다.

문자열 입력 : .........................................................................................................................................................................................................................................................................

결과 : 0

[case 4]

문자열을 입력하면 공백문자, 콤마, 마침표를 제외한 문자의 수를 셉니다.

문자열 입력 : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

결과 : 99


4-20A. 문자열을 공백 문자, 콤마, 마침표를 기준으로 단어로 구분하고 한 줄에 한 단어씩 출력하는 함수를 작성하시오. main() 함수에서 이 함수를 호출하여 결과를 출력하시오.

<CODE>

#include <stdio.h>
#include <stdlib.h>
#define size 100


void strprinter_withexcep(char * , int );
void main() {
        char * usrinput = (char *)malloc(sizeof(char)*size);
        char temp;
        int count = 0, strlength;


        puts("문자열을 입력하면 공백문자, 콤마, 마침표를 기준으로 단어를 한 줄씩 출력합니다.");
        fputs("문자열 입력 : ",stdout);


        while(1) {
                if(count == size) {
                        usrinput[count-1] = '\0';
                        while(getchar()!='\n');
                        strlength = count-1;
                        break;
                }
                temp = getchar();
                if(temp == '\n') {
                        usrinput[count] = '\n';
                        strlength = count;
                        break;
                }
                usrinput[count]=temp;
                count ++;
        }


        puts("< 결과 >");
        strprinter_withexcep(usrinput, strlength);
}


void strprinter_withexcep(char * finput, int length) {
        int indexcont = 0, temp=0;


        while(indexcont<length) {
                if(finput[indexcont]==' '||finput[indexcont]==','||finput[indexcont]=='.') {
                        finput[indexcont]='\0';
                        printf("%s\n", &finput[temp]);
                        temp=indexcont+1;
                        indexcont++;
                        continue;
                }
                indexcont++;
                if(indexcont==length) {
                        printf("%s", &finput[temp]);
                }
        }
}


<RESULT>

[case 1]

문자열을 입력하면 공백문자, 콤마, 마침표를 기준으로 단어를 한 줄씩 출력합니다.

문자열 입력 : abc.def.ghi.jkl

< 결과 >

abc

def

ghi

jkl

[case 2]

문자열을 입력하면 공백문자, 콤마, 마침표를 기준으로 단어를 한 줄씩 출력합니다.

문자열 입력 : hello my name is realdragonhead!!!

< 결과 >

hello

my

name

is

realdragonhead!!!

[case 3]

문자열을 입력하면 공백문자, 콤마, 마침표를 기준으로 단어를 한 줄씩 출력합니다.

문자열 입력 : im fine, thank you.

< 결과 >

im

fine


thank

you

[case 4]

문자열을 입력하면 공백문자, 콤마, 마침표를 기준으로 단어를 한 줄씩 출력합니다.

문자열 입력 : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

< 결과 >

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

3 Comments
3 Selovic 06.06 01:21  
오늘은 안올라오는줄 알았어요! ㅎㅎㅎ
3 realdragonhead 06.06 15:22  
갑자기 1박2일동안 어디 갔다와서ㅠㅠ 갔다오자마자 글 올렸네요 ㅎㅎㅎ
3 Selovic 06.08 23:36  
Category
State
  • 현재 접속자 25 명
  • 오늘 방문자 617 명
  • 어제 방문자 459 명
  • 최대 방문자 948 명
  • 전체 방문자 146,369 명
  • 전체 게시물 1,771 개
  • 전체 댓글수 248 개
  • 전체 회원수 111 명
Facebook Twitter GooglePlus KakaoStory NaverBand