Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 원시 문자열 리터럴(Raw String Literal) 완벽 정리

C++11부터 원시 문자열(Raw String)이라는 개념이 도입되었습니다. 일반 문자열에서는 \n, \t 같은 이스케이프 시퀀스가 특별한 의미를 갖습니다. 예를 들어 \n은 커서를 다음 줄로 이동시키고, \t는 탭(tab) 공백을 생성합니다.

하지만 때로는 이러한 이스케이프 문자의 효과를 적용하지 않고, 문자 그대로 화면에 출력해야 하는 경우가 있습니다. 이럴 때 원시 문자열 모드를 사용하면 됩니다. 문자열 앞에 R을 붙이면 해당 문자열이 원시 문자열로 처리되어, 내부의 모든 문자가 있는 그대로 해석됩니다.

입력: 문자열 "Hello\tWorld\nC++"
출력: "Hello\tWorld\nC++"

동작 원리

1단계: 문자열을 준비한다
2단계: 문자열 앞에 R을 붙여 원시 문자열로 만든다
3단계: 종료

예제 코드

아래 예제는 일반 문자열과 원시 문자열의 출력 차이를 보여줍니다. 참고로 원시 문자열의 표준 문법은 R"(...)")처럼 괄호를 포함한 구분자 형태를 사용해야 합니다.

#include <iostream>
using namespace std;

int main() {
    string my_str = "Hello\tWorld\nC++";
    string raw_string = R"(Hello\tWorld\nC++)";
    
    cout << "일반 문자열:" << endl;
    cout << my_str << endl;
    cout << "원시 문자열:" << endl;
    cout << raw_string << endl;
    
    return 0;
}

실행 결과

일반 문자열:
Hello	World
C++
원시 문자열:
Hello\tWorld\nC++

커스텀 구분자 활용하기

문자열 안에 괄호 )가 포함된 경우에는 기본 구분자만으로는 문자열을 제대로 닫을 수 없습니다. 이때 임의의 구분자를 추가하여 문제를 해결할 수 있습니다.

string path = R"del(C:\Users\test)del";

위 코드에서 del이 커스텀 구분자 역할을 하며, 여는 부분 R"del(과 닫는 부분 )del"이 서로 짝을 이룹니다.

정리

원시 문자열은 정규표현식, 파일 경로, HTML/XML 같은 이스케이프 문자가 많은 텍스트를 다룰 때 특히 유용합니다. 백슬래시를 일일이 이중으로 작성할 필요가 없어 코드의 가독성이 크게 향상됩니다.