이 튜토리얼에서는 C/C++에서 문자열을 거꾸로 뒤집는(반전시키는) 다양한 방법을 예제 코드와 함께 살펴보겠습니다.
문자열 반전은 코딩 인터뷰나 알고리즘 문제에서 자주 등장하는 기본 개념입니다. 직접 함수를 구현하는 방법부터 C++ 표준 라이브러리를 활용하는 방법까지, 상황에 맞게 선택할 수 있도록 세 가지 접근 방식을 소개합니다.
1. 사용자 정의 reverse() 함수 활용
가장 기본적인 방법은 문자열의 앞쪽과 뒤쪽 문자를 서로 교환(swap)하며 가운데로 이동하는 방식입니다. 문자열 길이의 절반만큼만 반복하면 되므로 효율적입니다.
#include <bits/stdc++.h>
using namespace std;
// 주어진 문자열을 뒤집는 함수
void reverse_str(string& str){
int n = str.length();
for (int i = 0; i < n / 2; i++)
swap(str[i], str[n - i - 1]);
}
int main(){
string str = "tutorialspoint";
reverse_str(str);
cout << str;
return 0;
}이 방식의 장점은 원본 문자열 자체를 변경(제자리 반전)하기 때문에 별도의 메모리 할당이 필요 없다는 점입니다.
2. 내장 reverse() 함수 활용
C++의 <algorithm> 헤더에 포함된 표준 라이브러리 함수인 std::reverse()를 사용하면 한 줄로 간단하게 처리할 수 있습니다. 시작 반복자와 끝 반복자를 인자로 전달하면 해당 범위의 요소들이 순서대로 뒤집힙니다.
#include <bits/stdc++.h>
using namespace std;
int main(){
string str = "tutorialspoint";
reverse(str.begin(), str.end());
cout << str;
return 0;
}실무에서는 직접 구현하는 것보다 검증된 표준 라이브러리를 사용하는 것이 코드의 안정성과 가독성 측면에서 권장됩니다.
3. 문자열을 뒤집어서 출력하기
세 번째 방법은 원본 문자열을 변경하지 않고, 뒤에서부터 앞으로 순회하며 문자를 하나씩 출력하는 방식입니다. 원본 데이터를 보존해야 하는 경우에 유용합니다.
#include <bits/stdc++.h>
using namespace std;
void reverse(string str){
for (int i=str.length()-1; i>=0; i--)
cout << str[i];
}
int main(void){
string s = "tutorialspoint";
reverse(s);
return (0);
}실행 결과
세 가지 방법 모두 아래와 동일한 결과를 출력합니다.
tniopslairotut
마무리
정리하면, 제자리에서 문자열을 변경해야 한다면 첫 번째나 두 번째 방법이 적합하고, 원본을 유지하면서 뒤집힌 형태만 확인하고 싶다면 세 번째 방법이 좋습니다. 특히 C++에서는 std::reverse()를 사용하는 것이 가장 간결하고 안전한 선택입니다.