kitty_lovely

[C언어] 대소문자 바꿔서 출력하기 (다시 풀어보기) 본문

응애 나 아기 코테 연습생/응애 나 아기 C

[C언어] 대소문자 바꿔서 출력하기 (다시 풀어보기)

kitty_cat 2024. 3. 25. 11:15

< 문제 설명 >

영어 알파벳으로 이루어진 문자열 str이 주어집니다.

각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요.

 

< 제한사항 >

- 1 ≤ str의 길이 ≤ 20
- str은 알파벳으로 이루어진 문자열입니다.

 

< 작성코드 >

#include <stdio.h>
#include <ctype.h>  // 대소문자 변환을 위해 필요한 헤더 파일

#define LEN_INPUT 10

int main(void) {
    char s1[LEN_INPUT];
    scanf("%s", s1);

    for (int i = 0; s1[i] != '\0'; i++) {
        if (islower(s1[i])) {
            s1[i] = toupper(s1[i]);  
        } else if (isupper(s1[i])) {
            s1[i] = tolower(s1[i]);  
        }
    }

    printf("%s\n", s1);  
    return 0;
}

 

< 다른 풀이 >

#include <stdio.h>
#define LEN_INPUT 11

int main(void) {
    char s1[LEN_INPUT];
    scanf("%s", s1);
    int len = strlen(s1);

    for(int i = 0; i < len; i++) {
        if(s1[i] >= 'A' && s1[i] <= 'Z') s1[i] += 32;
        else if(s1[i] >= 'a' && s1[i] <= 'z') s1[i] -= 32;
    }

    printf("%s", s1);

    return 0;
}
#include <stdio.h>
#define LEN_INPUT 10

int main(void) {
    char s1[LEN_INPUT]; 
    scanf("%s", s1);
    int i=0;
    for(i=0 ; s1[i]; i++){
        if(islower(s1[i])){ 
            s1[i]=s1[i]-'a'+'A';
        } else if(isupper(s1[i])){
            s1[i]=s1[i]-'A'+'a';
        }
    }
    printf("%s", s1);

    return 0;
}

< 참고 >

- 서치하면서 작성한 코드이기 때문에 반드시 두 코드 리뷰 하고 넘어갈 것!

- 아스키코드 관련해서 인지하고 있어야 함

- islower() 함수는 소문자인 경우 1을 반환하고, isupper() 함수는 대문자인 경우 1을 반환한다.

s1[i]=s1[i]-'a'+'A'
- 주어진 문자열에서 알파벳 소문자를 대문자로 변환하는 방법 중 하나 (ASCII 값으로 알파벳을 변환하는 방법)
- 알파벳의 대문자와 소문자는 ASCII 값으로 32만큼 차이가 남
   ➡️ 주어진 문자열에서 알파벳 소문자를 대문자로 변환하려면
       각 문자의 ASCII 값에서 'a'의 ASCII 값을 빼주고, 이에 'A'의 ASCII 값을 더해주면 됨.
 
❓ 'a'로만 작성해도 아스키값으로 인식되는 이유는?

- 'a'는 작은 따옴표로 감싸진 문자 상수로, C언어에서는 작음 따옴표로 감싸진 문자 상수는 해당 문자의 ASCII 값으로 해석됨

 

< 관련 에러 >

별도 아카이빙 하지 않음

다음에 재풀이 시에 아카이빙 예정