홈 > IT > IT정보
IT정보

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

3 realdragonhead 5 1156 2 0

4-7. 소문자는 대문자로 변환하여 반환하고, 그 외의 문자는 그대로 반환하는 함수를 작성하시오. main() 함수에서 이 함수를 호출하고, 반환된 값을 출력하시오.

<CODE>

#include <stdio.h>


char lowertoupperout(char );
void main() {
        char usrinput;
        puts("한 문자를 출력합니다. 소문자는 대문자로 바꿔 출력합니다.");
        fputs("한 문자 입력 : ", stdout);
        scanf("%c", &usrinput);
        printf("결과 : %c\n", lowertoupperout(usrinput));
}


char lowertoupperout(char charact) {
        if(97<=charact&&charact<=122)
                return charact-32;
        else
                return charact;
}


<RESULT>

[case 1]

한 문자를 출력합니다. 소문자는 대문자로 바꿔 출력합니다.

한 문자 입력 : a

결과 : A

[case 2]

한 문자를 출력합니다. 소문자는 대문자로 바꿔 출력합니다.

한 문자 입력 : @

결과 : @


4-7A. 대문자는 소문자로 변환하여 반환하고, 그 외의 문자는 그대로 반환하는 함수를 작성하시오. main() 함수에서 이 함수를 호출하고, 반환된 값을 출력하시오.

<CODE>

#include <stdio.h>


char uppertolowerout(char );
void main() {
        char usrinput;
        puts("한 문자를  출력합니다. 대문자는 소문자로 변환하여 출력합니다.");
        fputs("한 문자 입력 : ", stdout);
        scanf("%c", &usrinput);
        printf("결과 : %c\n", uppertolowerout(usrinput));
}


char uppertolowerout(char charact) {
        if(65<=charact&&charact<=90)
                return charact + 32;
        else
                return charact;
}


<RESULT>

[case 1]

한 문자를  출력합니다. 대문자는 소문자로 변환하여 출력합니다.

한 문자 입력 : A

결과 : a

[case 2]

한 문자를  출력합니다. 대문자는 소문자로 변환하여 출력합니다.

한 문자 입력 : @

결과 : @


4-7B. 소문자면 대문자로 변환하여 반환하고, 대문자면 소문자로 변환하여 반환하고, 기타 문자는 그대로 반환하는 함수를 작성하시오. main() 함수에서 이 함수를 이용하여 <Enter> 키를 누를 때까지 계속 문자를 입력받아 출력하시오.

<CODE>

include <stdio.h>
#include <stdlib.h>


char strchanger(char );
void main() {
        char * usrinput = (char *)malloc(100);  //받고하는 문자열 저장을 위한 동적메모리 할당.
        int usrchtemp;  //대소문자 변경을 위한 임시 저장 변수.
        int usrcount = 0;       //선언된 문자열의 인덱스를 위한 변수.


        puts("문자열을 입력받습니다. 대문자는 소문자로, 소문자는 대문자로 변경합니다.");
        fputs("문자열 입력 : ", stdout);
        while(1)        //수 많은 방법이 있지만, getchar 함수를 이용하여 무한반복.
        {
                usrchtemp = getchar();  //스트림을 통해 입력받은 문자하나 임시저장.
                if(usrchtemp == 'n') break;    //개행문자인지 판단.
                usrinput[usrcount] = strchanger(usrchtemp);     //대소문자 변경함수를 통한 변경 후선언된 동적메모리에 저장.
                usrcount++;     //다음 문자를 읽기 위해 인덱스 1 증가.
                if(usrcount == 100)
                        break;
        }
        printf("결과 : %sn",usrinput);
        free(usrinput);
}


char strchanger(char charact) {
        if(65<=charact&&charact<=90)
                return charact+32;
        else if(97<=charact&&charact<=122)
                return charact-32;
        else
                return charact;
}


<RESULT>

문자열을 입력받습니다. 대문자는 소문자로, 소문자는 대문자로 변경합니다.

문자열 입력 : Realdragonhead like Hacure!! And you??

결과 : rEALDRAGONHEAD LIKE hACURE!! aND YOU??


4-7C.  비트 단위의 연산자를 이용하여 4-7B를 구현하시오.

<CODE>

#include <stdio.h>
#include <stdlib.h>


char strchanger(char );
void main() {
        char * usrinput = (char *)malloc(100);  //받고하는 문자열 저장을 위한 동적메모리 할당.
        int usrchtemp;  //대소문자 변경을 위한 임시 저장 변수.
        int usrcount = 0;       //선언된 문자열의 인덱스를 위한 변수.


        puts("문자열을 입력받습니다. 대문자는 소문자로, 소문자는 대문자로 변경합니다.");
        fputs("문자열 입력 : ", stdout);
        while(1)        //수 많은 방법이 있지만, getchar 함수를 이용하여 무한반복.
        {
                usrchtemp = getchar();  //스트림을 통해 입력받은 문자하나 임시저장.
                if(usrchtemp == 'n') break;    //개행문자인지 판단.
                usrinput[usrcount] = strchanger(usrchtemp);     //대소문자 변경함수를 통한 변경 후선언된 동적메모리에 저장.
                usrcount++;     //다음 문자를 읽기 위해 인덱스 1 증가.
                if(usrcount == 100)
                        break;
        }
        printf("결과 : %sn",usrinput);
        free(usrinput);
}


char strchanger(char charact) {
        if(65<=charact&&charact<=90)
                return charact+(2<<4);  //32만큼 차이가 남아서, 비트 연산자를 이용하여 32를 표현하>였다.
        else if(97<=charact&&charact<=122)
                return charact-(2<<4);  //32만큼 차이가 남아서, 비트 연산자를 이용하여 32를 표현하>였다.
        else
                return charact;
}


<RESULT>

문자열을 입력받습니다. 대문자는 소문자로, 소문자는 대문자로 변경합니다.

문자열 입력 : Realdragonhead like Hacure!! And you??

결과 : rEALDRAGONHEAD LIKE hACURE!! aND YOU??


5 Comments
3 Selovic 03.12 23:44  
완벽하게 잘 푼거같아요 !! ㅎㅎ
3 realdragonhead 03.12 23:46  
@Selovic 감사합니다!!!
1 스레기 03.13 23:29  
멋져요
3 realdragonhead 03.14 20:18  
@스레기 감사합니다! 좀더 열심히 할게요!
3 realdragonhead 03.24 09:28  
위 예제 중 4-7B 와 4-7C에 BOF 문제가 있어서 코드를 수정하였습니다.
Category
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand
PlusFriend Chat