[C++] C++의 특수 문자 출력에 대해
✨ 특수 문자
특수 문자 출력은 생각보다 여러 곳에서 많이 쓰인다. 리소스 경로, 디버깅 콘솔, 코딩 테스트 등에서 제대로 된 특수 문자 출력 방법이 기억이 안나서 다시 검색하는 번거로움이 싫어서 따로 정리하고자 한다.
🚪 이스케이프 시퀀스 (Escape Sequence)
문자열 안에서 \(백슬래시)로 시작하는 특수 문자들을 이스케이프 시퀀스라고 한다.
| 이스케이프 | 출력 결과 | 설명 |
|---|---|---|
\n |
줄바꿈 | newline |
\t |
탭 | tab |
\r |
캐리지 리턴 | 줄 맨 앞으로 |
\b |
백스페이스 | 한 글자 삭제 |
\\ |
\ |
백슬래시 출력 |
\" |
" |
큰따옴표 |
\' |
' |
작은따옴표 |
\0 |
널 문자 | 문자열 종료 |
\(백슬래시)출력
cout << "\\"; // 출력 : \
큰따옴표/작은따옴표출력
cout << "\"Hello\""; // 출력 : "Hello"
cout << '\''; // 출력 : '
여러 줄 문자열출력
cout << "Hello\nWorld\nC++";
📦 Raw String Literal (C++11 ~ )
R"( ... )" 형식으로 표현하는 것을 Raw String Literal이라고 한다. 이 괄호 안의 이스케이프 시퀀스는 모두 무시되므로, 특수 문자가 많고 긴 문자열을 출력할 때 매우 편하게 쓸 수 있다.
Raw String Literal이 특히나 좋은 경우\(백슬래시),큰따옴표/작은따옴표의 출력이 많을 때- 경로 문자열 출력
(C:\Users\...) - 정규식 / 이스케이프가 많은 문자열을 그대로 출력해야 할 때
cout << R"(C:\Users\youns119\Documents)";
cout << R"(Hello
World
C++)";
※ 주의 사항
기본 형태가 R"( ... )"이므로 문자열 내부에 )"가 먼저 나오면 종료로 인식되어 문자열이 끊길 수 있다. 따라서 이럴 때는 구분자 (delimiter)를 붙여서 해결한다.
구분자 (delimiter)는 기본적으로
- 영문자, 숫자,
_⭕ 가능 - 공백, 괄호, 따옴표, 특수문자 ❌ 불가능
의 규칙만 지키면 그냥 맘대로 이름을 지어도 된다. 그러나 관례적으로는 DELIM, TAG, RAW, END 등을 자주 쓴다. 사용법은 아래와 같다.
R"TAG(이 안에 )" 가 있어도 OK)TAG"
이런식으로 구분자로 시작과 끝을 잘 지켜주기만 하면 된다.
🎨 ASCII 아트 출력
위의 이스케이프 시퀀스와 Raw String Literal 같은 것을 적절히 사용하면 ASCII 아트 출력을 매우 쉽게 할 수 있다.
예제 1)
- 고양이 출력 (
이스케이프 시퀀스방식)
고양이 출력
cout << "\\ /\\" << '\n';
cout << " ) ( ')" << '\n';
cout << "( / )" << '\n';
cout << " \\(__)|" << '\n';
예제 2)
- 개 출력 (
Raw String Literal방식)
개 출력
cout << R"(|\_/|
|q p| /}
( 0 )"""\
|"^"` |
||_/=\\__|)";
🔤 문자 vs 문자열
문자는 단일 문자를 뜻하며, 문자열은 그러한 문자들이 모인 하나의 문장을 뜻한다. 따라서 표현 방식도 달라야 한다.
char c = '\n'; // 단일 문자
string s = "\n"; // 문자열
cout << c;
cout << s;
`char`은 작은 따옴표, `string`은 큰 따옴표로 표현한다.
🧾 char로 ASCII 코드 출력
문자열로 ASCII 코드를 출력하는 것이 아닌 단일 문자로 출력하고 싶을 때, char형으로도 표현 가능하다.
cout << char(65); // A
cout << char(10); // 줄바꿈
cout << char(92); // \
💭 그 외
그 외에도 특수 문자와 관련한 여러 트릭이나 표현 방식이 있겠지만, 이 정도만 알아둬도 당장은 충분하지 않을까 싶다. 혹여나 새로운 정보를 얻게 되면 계속 갱신해야겠다.
Comments