Coding Test

tolower(), toupper() 대소문자 변환 문제

honey-vision 2024. 5. 22. 10:20

문자열 입력을 주었을 때 소문자는 대문자로, 대문자는 소문자로 변환하는 코드를 구현해보자.

 

사용할 함수는 다음과 같다.

  • tolower() 대문자 → 소문자
  • toupper() 소문자 → 대문자

이제 알고리즘을 써보자.

- 문자열을 입력한다

- 입력된 문자를 배열에 저장한다

- 문자가 소문자인지 대문자인지 검사한다

- 문자가 소문자면 대문자로 변환한다

- 문자가 대문자면 소문자로 변환한다

- 문자열을 출력한다

 

알고리즘에 맞게 코드를 써보자.

 

문자와 관련된 함수를 포함하고 있는 'ctype.h' 라이브러리를 불러온다. 

# include <ctype.h>

 

문자열을 변환할 함수를 만든다.

void change_str (char *a){  // 'change_str ' 라는 이름의 함수를 만들고 배열 a 안에 변수가 입력된다
    for(int i; i < LEN_INPUT;i++){ // 입력된 문자열 길이 만큼 반복한다
        if(islower(a[i])) // 배열 a의 i번째 알파벳이 소문자면
            a[i] = toupper(a[i]); // 배열 a의 i번째 알파벳을 대문자로 바꾼다
        else(isupper(a[i])); // 배열 a의 i번째 알파벳이 대문자면
            a[i] = tolower(a[i]); // 배열 a의 i번째 알파벳을 소문자로 바꾼다
    }
}

 

 

전체 코드는 아래와 같다.

이 코드는 오류 코드이고 마지막 코드가 수정 후 완성 코드이다.

#include <stdio.h>
#include <ctype.h>
#define LEN_INPUT 20

void change_str (char *a){
    for(int i; i < LEN_INPUT;i++){
        if(islower(a[i]))
            a[i] = toupper(a[i]);
        else(isupper(a[i]));
            a[i] = tolower(a[i]);
    }
}

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

    return 0;
}

 

위 코드는 문자열 변환이 적용되지 않는 문제점이 있었다.

- int i 초기화 - 잘못된 세미콜론

 

수정 후 최종 코드다.

#include <stdio.h>
#include <ctype.h>
#define LEN_INPUT 20

void change_str (char *a){
    for(int i=0; i < LEN_INPUT;i++){
        if(islower(a[i]))
            a[i] = toupper(a[i]);
        else if(isupper(a[i]))
            a[i] = tolower(a[i]);
    }
}

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

    return 0;
}

'Coding Test' 카테고리의 다른 글

두 수의 나눗셈  (0) 2024.06.05
각도기  (0) 2024.06.02
문자열 겹쳐쓰기  (0) 2024.05.29
문자열 돌리기  (0) 2024.05.24
특수문자 출력하기  (0) 2024.05.23