홈 > IT > IT정보
IT정보

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

2 realdragonhead 0 29 0 0

4-21. atoi() 함수를 이용하여 십진 숫자 문자('0', '1', ... '9')로 이루어진 문자열을 정수로 변환하고, itoa() 함수를 이용하여 정수를 문자열로 변환하는 프로그램을 작성하시오.

<CODE>

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define size 11


long strtoint(char * , int);
void inttostr(long );
void main() {
        char * usrstrinput = (char *)malloc(sizeof(char)*size);
        char temp;
        long usrintinput;
        int count=0;


        puts("십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자열을 정수로 변환하고 다시 문자로 변환시켜줍니다.");
        printf("숫자 문자열 입력(최대 %d자리) : ",size-1);
        while(1) {
                if(count == size) {
                        usrstrinput[count-1] = '\0';
                        while(getchar()!='\n');
                        count--;
                        break;
                }
                temp = getchar();
                if(temp == '\n') {
                        usrstrinput[count] = '\0';
                        break;
                }
                usrstrinput[count] = temp;
                count++;
        }


        inttostr(strtoint(usrstrinput, count-1));
}


long strtoint(char * finput, int flength) {
        char temp;
        int count=0, strlength;
        long result;


        result = atoi(finput);


        printf("정수로 변환된 결과 : %ld\n", result);
        return result;
}


void inttostr(long fintinput) {
        char * strresult = (char *)malloc(sizeof(char)*size*4);


        sprintf(strresult, "%ld", fintinput);
        printf("문자열로 변환된 결과 : %s\n", strresult);


}


<RESULT>

[case 1]

십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자열을 정수로 변환하고 다시 문자로 변환시켜줍니다.

숫자 문자열 입력(최대 10자리) : 1234

정수로 변환된 결과 : 1234

문자열로 변환된 결과 : 1234

[case 2]

십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자열을 정수로 변환하고 다시 문자로 변환시켜줍니다.

숫자 문자열 입력(최대 10자리) : 12345a

정수로 변환된 결과 : 12345

문자열로 변환된 결과 : 12345

[case 3]

십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자열을 정수로 변환하고 다시 문자로 변환시켜줍니다.

숫자 문자열 입력(최대 10자리) : aaaaaaaaaaaaaaaaaaaaaaaaaaaa

정수로 변환된 결과 : 0

문자열로 변환된 결과 : 0

[case 4]

십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자열을 정수로 변환하고 다시 문자로 변환시켜줍니다.

숫자 문자열 입력(최대 10자리) : 111111111111111111111111111111111111

정수로 변환된 결과 : 1111111111

문자열로 변환된 결과 : 1111111111

[case 5]

십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자열을 정수로 변환하고 다시 문자로 변환시켜줍니다.

숫자 문자열 입력(최대 10자리) : -12345

정수로 변환된 결과 : -12345

문자열로 변환된 결과 : -12345


4-21A. 십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자열을 매개변수로 입력받아 정수로 바꾸어 반환하는 함수를 포인터를 이용하여 작성하시오. 단 십진 숫자 문자 이외의 문자가 포함된 경우 그 전까지만 반환한다. main() 함수에서 이 함수를 호출하여 결과를 출력하시오.

<CODE>

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define size 11


long strtoint(char * , int);
void main() {
        char * usrstrinput = (char *)malloc(sizeof(char)*size);
        char temp;
        long usrintinput;
        int count=0, dcount = 0;


        puts("십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자로 변환시켜줍니다. 문자가 입력된 경우 그 전까지만 변환시켜줍니다..");
        printf("숫자 문자열 입력(최대 %d자리) : ",size-1);
        while(1) {
                if(count == size) {
                        usrstrinput[count-1] = '\0';
                        while(getchar()!='\n');
                        count--;
                        break;
                }
                temp = getchar();
                if(temp < '0' || temp > '9') {
                        usrstrinput[count] = '\0';
                        break;
                }
                if(temp == '\n') {
                        usrstrinput[count] = '\0';
                        break;
                }
                usrstrinput[count] = temp;
                count++;
        }


        strtoint(usrstrinput, count-1);


}


long strtoint(char * finput, int flength) {
        char temp;
        int fcount=0, strlength;
        long result=0;


        while(flength >= 0) {
                result += (finput[flength--]-48)*pow(10,fcount);
                fcount++;
        }


        printf("정수로 변환된 결과 : %ld\n", result);
        return result;
}


<RESULT>

[case 1]

십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자로 변환시켜줍니다. 문자가 입력된 경우 그 전까지만 변환시켜줍니다..

숫자 입력(최대 10자리) : 1234

정수로 변환된 결과 : 1234

[case 2]

십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자로 변환시켜줍니다. 문자가 입력된 경우 그 전까지만 변환시켜줍니다..

숫자 입력(최대 10자리) : 12345123a

정수로 변환된 결과 : 12345123

[case 3]

십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자로 변환시켜줍니다. 문자가 입력된 경우 그 전까지만 변환시켜줍니다..

숫자 입력(최대 10자리) : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

정수로 변환된 결과 : 0

[case 4]

십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자로 변환시켜줍니다. 문자가 입력된 경우 그 전까지만 변환시켜줍니다..

숫자 입력(최대 10자리) : 11111111111111111111111111111

정수로 변환된 결과 : 1111111111

[case 5]

십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자로 변환시켜줍니다. 문자가 입력된 경우 그 전까지만 변환시켜줍니다..

숫자 입력(최대 10자리) : -1235123

정수로 변환된 결과 : 0


4-21B. 부호 문자('-', '+')와 십진 숫자 문자('0', '1', ...,'9')로 이루어진 문자열을 정수로 바꾸어 그 값을 반환하는 함수를 포인터를 이용하여 작성하시오. 단 십진 숫자 문자 이외의 문자가 포함된 경우 그 전까지만 반환한다. main() 함수에서 이 함수를 호출하여 결과를 출력하시오.

<CODE>

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define size 11


long strtoint(char * , int);
void main() {
        char * usrstrinput = (char *)malloc(sizeof(char)*size);
        char temp;
        long usrintinput;
        int count=0, dcount = 0;


        puts("부호문자('+', '-')와 십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자로 변환시켜줍니다. 문자가 입력된 경우 그 전까지
만 변환시켜줍니다..");
        printf("숫자 문자열 입력(최대 %d자리) : ",size-1);
        while(1) {
                if(count == size) {
                        usrstrinput[count-1] = '\0';
                        while(getchar()!='\n');
                        count--;
                        break;
                }
                temp = getchar();
                if(count == 0 && temp == '-') {
                        usrstrinput[count] = '-';
                        count++;
                        continue;
                }
                if(temp < '0' || temp > '9') {
                        usrstrinput[count] = '\0';
                        break;
                }
                if(temp == '\n') {
                        usrstrinput[count] = '\0';
                        break;
                }
                usrstrinput[count] = temp;
                count++;
        }


        strtoint(usrstrinput, count-1);


}


long strtoint(char * finput, int flength) {
        char temp;
        int fcount=0, strlength, index=0;
        long result=0;


        if(finput[0] == '-')
                index = 1;


        while(flength >= index) {
                result += (finput[flength--]-48)*pow(10,fcount);
                fcount++;
        }
        if(index == 1)
                result*=-1;


        printf("정수로 변환된 결과 : %ld\n", result);
        return result;
}


<RESULT>

[case 1]

부호문자('+', '-')와 십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자로 변환시켜줍니다. 문자가 입력된 경우 그 전까지만 변환시켜줍니다..

숫자 문자열 입력(최대 10자리) : 1234

정수로 변환된 결과 : 1234

[case 2]

부호문자('+', '-')와 십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자로 변환시켜줍니다. 문자가 입력된 경우 그 전까지만 변환시켜줍니다..

숫자 문자열 입력(최대 10자리) : 12341adsfasdf

정수로 변환된 결과 : 12341

[case 3]

부호문자('+', '-')와 십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자로 변환시켜줍니다. 문자가 입력된 경우 그 전까지만 변환시켜줍니다..

숫자 문자열 입력(최대 10자리) : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

정수로 변환된 결과 : 0

[case 4]

부호문자('+', '-')와 십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자로 변환시켜줍니다. 문자가 입력된 경우 그 전까지만 변환시켜줍니다..

숫자 문자열 입력(최대 10자리) : 111111111111111111111111111

정수로 변환된 결과 : 1111111111

[case 5]

부호문자('+', '-')와 십진 숫자 문자('0', '1', ..., '9')로 이루어진 문자로 변환시켜줍니다. 문자가 입력된 경우 그 전까지만 변환시켜줍니다..

숫자 문자열 입력(최대 10자리) : -12341234

정수로 변환된 결과 : -12341234

0 Comments