문자열(String)은 여러 개의 문자가 연속된 형태를 의미합니다. C++ 프로그래밍 언어에서는 문자열을 크게 두 가지 방식으로 정의할 수 있습니다.
- C 스타일 문자열: 문자열을 문자 배열(char array)로 취급하는 전통적인 방식입니다.
- C++ 문자열 클래스(string class): 표준 라이브러리에서 제공하는 객체 기반의 문자열 처리 방식입니다.
C++ 문자열 클래스란?
C++에서는 <string> 헤더 파일을 포함하여 문자열 클래스를 사용할 수 있습니다. 내부적으로는 문자 배열 형태로 메모리에 저장되지만, 사용자에게는 하나의 문자열 객체로 보여줍니다.
이 클래스는 다양한 멤버 함수를 제공하여 문자열 조작을 훨씬 편리하고 안전하게 만들어 줍니다. 대표적인 함수로는 다음과 같은 것들이 있습니다.
length()/size(): 문자열의 길이를 반환합니다.at(): 특정 위치의 문자에 접근하며, 범위 검사도 수행합니다.find(): 문자열 내에서 특정 문자나 부분 문자열의 위치를 찾습니다.replace(): 지정한 위치의 문자열을 다른 문자열로 교체합니다.
이러한 메서드들을 활용하면 코드의 가독성과 효율성을 동시에 높일 수 있습니다.
실전 활용 예제
아래는 문자열 클래스의 대표적인 응용 사례 두 가지를 보여주는 코드입니다. 첫 번째는 문자열이 숫자로만 구성되어 있는지 검사하는 기능이고, 두 번째는 공백을 URL 인코딩 값인 %20으로 치환하는 기능입니다.
#include <bits/stdc++.h>
using namespace std;
// 문자열이 숫자(0~9)로만 이루어져 있는지 확인하는 함수
bool charcheck(string str) {
int l = str.length();
for (int i = 0; i < l; i++) {
if (str.at(i) < '0' || str.at(i) > '9')
return false;
}
return true;
}
// 공백을 %20으로 치환하는 함수 (URL 인코딩)
string replacedotWith20(string str) {
string replaceby = "%20";
int n = 0;
while ((n = str.find(" ", n)) != string::npos) {
str.replace(n, 1, replaceby);
n += replaceby.length();
}
return str;
}
int main() {
string num = "3452i";
if (charcheck(num))
cout << "string contains only digit" << endl;
else
cout << "string contains other characters too" << endl;
string url = "google com in";
cout << replacedotWith20(url) << endl;
return 0;
}실행 결과
string contains other characters too google%20com%20in
코드 설명
charcheck 함수는 문자열의 각 문자를 순회하면서 해당 문자가 '0'부터 '9' 사이에 속하는지 검사합니다. 예제 입력값 "3452i"에는 알파벳 'i'가 포함되어 있으므로 false를 반환하고, 결과적으로 "다른 문자도 포함되어 있다"는 메시지가 출력됩니다.
replacedotWith20 함수는 find()를 이용해 공백의 위치를 반복적으로 탐색하고, 발견될 때마다 replace()로 공백 한 글자를 "%20" 세 글자로 바꿉니다. 탐색 시작 위치를 치환된 문자열 길이만큼 뒤로 이동시켜 무한 루프를 방지하는 점이 핵심입니다.
공백을 %20으로 변환하는 작업은 웹 개발에서 URL에 공백이 포함될 수 없기 때문에 매우 유용하게 활용됩니다. 이처럼 C++ 문자열 클래스는 유효성 검사, 데이터 변환 등 다양한 실무 상황에서 강력한 도구가 됩니다.