이 프로그램은 문자열에 포함된 모든 문자를 대소문자 반대 형태로 변환합니다. 즉, 대문자는 소문자로, 소문자는 대문자로 바꾸는 작업입니다. 사실 C++ 표준 라이브러리의 toupper(), tolower() 함수를 활용하면 손쉽게 구현할 수 있지만, 이 글에서는 각 문자의 ASCII 값을 직접 계산하여 변환하는 방법을 다룹니다.
알고리즘
START
Step-1: char 배열을 선언한다.
Step-2: 대문자인지 확인한다 — ASCII 값이 'A'(65) 이상이고 'Z'(90) 이하인 경우
Step-3: 소문자인지 확인한다 — ASCII 값이 'a'(97) 이상이고 'z'(122) 이하인 경우
ENDtoggleChars() 함수는 문자 배열을 입력으로 받습니다. 그런 다음 반복문을 순회하면서 각 문자의 ASCII 값이 'A'부터 'Z' 범위 안에 있는지, 아니면 'a'부터 'z' 범위 안에 있는지 판별합니다.
변환 원리
ASCII 코드표에서 대문자와 소문자는 항상 32만큼 차이가 납니다. 따라서 대문자를 소문자로 바꿀 때는 str[i] + ('a' - 'A')를 더하고, 소문자를 대문자로 바꿀 때는 str[i] + ('A' - 'a')를 더하면 됩니다. 알파벳이 아닌 문자(@, # 등)는 조건에 해당하지 않으므로 그대로 유지됩니다.
예제 코드
#include<iostream>
using namespace std;
void toggleChars(char str[]){
for (int i=0; str[i]!='\0'; i++){
if (str[i]>='A' && str[i]<='Z')
str[i] = str[i] + 'a' - 'A';
else if (str[i]>='a' && str[i]<='z')
str[i] = str[i] + 'A' - 'a';
}
}
int main(){
char str[] = "ajay@kumar#Yadav";
cout << "String before toggle::" << str << endl;
toggleChars(str);
cout << "String after toggle::" << str;
return 0;
}예제 문자열에는 대부분 소문자가 사용되었으며, 특수문자 '@'와 '#'은 변환되지 않고 그대로 출력됩니다. 실행 결과는 다음과 같습니다.
실행 결과
String before toggle::ajay@kumar#Yadav String after toggle::AJAY@KUMAR#yADAV