문자열 입력을 주었을 때 소문자는 대문자로, 대문자는 소문자로 변환하는 코드를 구현해보자.
사용할 함수는 다음과 같다.
- 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;
}