C++

C++ 포인터와 배열 (대문자를 소문자로 소문자를 대문자로)

ITSkeleton 2016. 10. 11. 15:42
728x90
반응형

안녕하세요

ITSkeleton 입니다.


저번 글처럼

포인터는 배열처럼 사용이 가능하다고 설명해 드렸는데요


이번에는

사용하는 방법에 대하여 설명해 드리려 합니다.


char array[256];

char *point;


알아보기 쉽게 변수명을 array와 point로 잡아 두었습니다.


array는 현재 256바이트가 부여되어있지요.

point는 아직 바이트가 부여되어 있지 않은 상태입니다.


간단하게

대.소문자를 변형시키는 코드를 통해서

코드를 작성해 보겠습니다.


fgets(array,255,stdin);


이 코드를 통해 콘솔 창에서 문자열 입력을 받을수 있습니다.

255는 문자를 255바이트까지 받을수 있는 것으로 만들어져 있습니다.


int length = strlen(array)+1;


위의 코드를 또 작성해줍니다.

strlen이란 문자열의 길이를 반환해 주는 것입니다.

fgets를 통하여 받아온 문자들은 array에 모두 담겨있는 상태입니다.


+1을 해준이유는 NULL이 맨앞부분에 포함이 되는데 그것까지 포함시킨 길이 값을 받아오는 것입니다.

자 이제


point = (char *)malloc(length);


위 코드를 이용하여 메모리 할당을 받는 코드입니다.

전에 쓴 글에 자세한 설명이 있습니다.


이제 대문자를 소문자로 소문자를 대문자로 바꿔보겟습니다.


for (int a = 0; a<length; a++){

if(array[a] >= 'a' && array[a] <= 'z')

point[a] = array[a] + 'A' - 'a';

else    

point[a] = array[a];

}


이제 코드 설명을 해드리겟습니다.


for문은 전부 아실거라 생각하고

'a'보다 크다

라는 것이 어떤의미냐 하면

아스키 코드 값입니다.


바로 위의 표와 같은 것이 아스키 표입니다.

문자를 10진으로 바꿔서 값을 비교한뒤 다시

문자로 바꿔주는 겁니다.


이해가 되시나요?

아스키 코드는 자주 쓸수있으니 어딘가에 적어두시면 많은 도움이 될거에요!


저렇게 코드를 적어주신다음


printf("array : %s", array);

printf("point : %s", point);


이렇게 적어주시면 출력하는것을 볼수 있습니다.

그리고 마지막으로

반드시 해주어야 하는 작업이있지요?

메모리 반환입니다


free(point);


를 사용해서 point의

메모리 할당받은 부분을 다시 반환해 줍니다.


이렇게하면

배열과 포인터를 사용해서

대문자를 소문자로

소문자를 대문자로 바꾸는 것을 알아보았습니다.


긴글 봐주셔서 감사합니다 ^_^


728x90
반응형