[C/C++]문자열 뒤집기(String Reverse)
문자열 뒤집기(String Reverse)
문자열을 뒤집을때 길을 재고 절반에 마지막인덱스와 첫인덱스에 데이터를 교체한다.
*코드
|
void swap(char &a, char &b)
{
char temp;
temp = a;
a = b;
b = temp;
}
void StrReverse(char* str)
{
int size = 0;
char temp;
while(str[size]!= NULL) size++;
for(int i = 0; i < size/2; i++)
{
swap(str[i],str[(size-1)-i]);
}
}
void main()
{
//char* str = "downkhg"; //swap()->a=b bug
char str[100] = "downkhg";
int size = 0;
printf("str:%s\n",str);
StrReverse(str);
printf("str:%s\n",str);
}
|
bug된 부분에서 버그를 만나고 한참을 해맸다.
이것은 배열과 포인터의 차이인데..
포인터도 선언해도 배열로 접근하면 다음 포인터로 이동함으로써 접근은 가능하지만
데이터 자체를 교환할때는 포인터의 경우 문자열의 시작 주소만 가르키고 있으므로, 다른 주소에 접근할땐 문제가 발생할수 있다고한다.
하지만 배열은 할당받을때부터 배열을 자신의 영역으로 받으므로 문제의 소지가 없다고한다.
문제
1.포인터는 문자열의 시작 주소만 가지고 있다. 배열식으로 접근이 포인터의 이동으로 가능하지만 일반적인 사용을 할경우 문제가 발생 할 경우도 있다.

결론: 포인터를 배열로 접근은 삼가한다. 배열로 접근해야 한다면 동적으로 할당하거나 배열을 이용한다.
댓글
댓글 쓰기