[Cpp]문자열 뒤집기
🤔문자열 뒤집기
🔑배열 사용
뒤집은 문자열을 저장할 배열을 하나 더 만든다.
기존 배열의 마지막 문자 부터 첫 문자까지 반대로 새로운 배열에 대입한다.
배열의 인덱스는 0번부터 시작하는 것과 문자열 끝에는 null 문자가 있다는 것에 주의해서 문자열을 다룬다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
int main()
{
char str[14] = "ReverseString";
char reverse[14] = {0,};
for (int i = 0; i < sizeof(str); ++i)
{
// 문자열 마지막에 반드시 null 문자를 넣어줘야 한다
if (i == sizeof(str) - 1)
{
reverse[sizeof(str) - 1] = '\0';
break;
}
// 배열의 인덱스는 0부터 시작
// null 문자 제외
// 따라서 (문자열 길이 - 2) 하면 마지막 문자에 접근 가능
reverse[i] = str[sizeof(str) - i - 2];
}
std::cout << "Reversed: " << reverse << std::endl;
}
🔑포인터 사용
첫 글자의 포인터와 마지막 글자의 포인터를 이용해서 문자열을 뒤집을 수 있다.
포인터의 역참조를 통해 첫 글자와 마지막 글자의 위치를 바꿔주는데 아래와 같은 조건이 있다.
첫 글자의 주소가 마지막 글자의 주소보다 커지거나 같아질 때까지 첫 글자의 주소는 증가시키고 마지막 글자의 주소는 감소시킨다.
첫 글자의 주소가 마지막 글자의 주소보다 커지거나 같아지면 뒤집을 문자가 없기 때문에 반복을 종료하는 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
int main()
{
char str[14] = "ReverseString";
// 문자열의 첫 글자 주소
char* head = str;
// 문자열의 마지막 글자 주소(null 문자 제외)
char* tail = str + sizeof(str) - 2;
while (head < tail)
{
// 문자 뒤집기
char temp = *head;
*head = *tail;
*tail = temp;
++head;
--tail;
}
std::cout << "Reversed: " << str << std::endl; // 결과: gnirtSesreveR
}
Leave a comment