[10-7] 소문자는 대문자로, 대문자는 소문자로 바꾸어 배열에 저장하려고 한다.(이때 라이브러리 함수를 사용하지 않는다.) 이 모든 제어를 포인터를 이용하여 처리하여 프로그램을 작성하라.
Hint
대문자 A의 ASCII code : 65, 대문자 Z의 ASCII code : 90
소문자 a의 ASCII code : 97, 대문자 z의 ASCII code : 122
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[50] = "Multi Campus.";
char* ptr;
int cnt = 0;
ptr = &str[0];
printf("before : %s\n\n", str);
while (*(ptr + cnt) != NULL)
{
if (*(ptr + cnt) >= 97 && *(ptr + cnt) <= 122)
*(ptr + cnt) -= 32;
else if (*(ptr + cnt) >= 65 && *(ptr + cnt) <= 90)
*(ptr + cnt) += 32;
cnt++;
}
printf("after : %s", str);
return 0;
}
먼저 ptr에 str[0]의 주소를 저장한다. 이는 0번지 문자부터 소,대문자 변환을 하기 위함이다.
while문에서 ptr + cnt 가 가르키는 문자가 NULL이 아닐 때 반복되도록 조건을 설정한다.
그리고 *(ptr + cnt)가 97 이상 122 이하 일때 즉, a ~ z 일 때 대-소문자의 ASCII code 차이인 32을 빼준다.
*(ptr + cnt)가 65 이상 90 이하 일때 즉, A ~ Z 일 때 대-소문자의 ASCII code 차이인 32을 더해준다.
그리고 다음 문자를 처리하기 위해 cnt에 1을 더해준다.
처음 코드를 짤때 공백( )과 온점(.) 까지 ±32가 되어서 변환되었다. 그래서 if문의 조건에 122 이하일 때, 90 이하일 때를 추가해줘서 알파벳만 변환되도록 수정했다.
결과