CS/C

[2021W C프로그래밍과 실습][연습문제 10-7] 포인터 활용해서 라이브러리 함수 사용하지 않고 문자배열 소문자 ↔ 대문자 변환하기

아이스얼그레이 2022. 2. 9. 22:21

[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 이하일 때를 추가해줘서 알파벳만 변환되도록 수정했다.

결과