티스토리 뷰
Q10926 문제
준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.
입력
첫째 줄에 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어진다. 아이디는 알파벳 소문자로만 이루어져 있으며, 길이는 50자를 넘지 않는다.
출력
첫째 줄에 준하의 놀람을 출력한다. 놀람은 아이디 뒤에 ??!를 붙여서 나타낸다.
처음에는 단순하게 string 변수 하나 생성해서 cout으로 출력하려했다. 하지만 warning: trigraph ignored [-Wtrigraphs] 와 같은 에러가 발생했다.
Trigraph 란?
Trigraph는 '삼중자'라는 뜻으로 컴파일러가 해당 문장 부호 문자로 대체하는 세 문자(두 개의 연속된 물음표로 시작)의 시퀀스이다. 즉, 특정 문자 세개가 나오면 다른 문자 하나로 대체되는 문자를 의미한다. C언어에서 삼중자 시퀀스를 사용하면 C 프로그램을 ISO(International Standards Organization) 고정 코드 집합만을 사용하여 쓸 수 있다. 따라서, C언어에서는 삼중자가 세개의 문자를 이용해서 다른 특수 문자를 표현할 수 있었기 때문에 편리한 기능이었다. 하지만 C++에 와서는 삼중자가 필요없어졌다. 그래서 삼중자를 C++에서 사용하면 Trigraph ignored라는 에러가 발생한다.

위의 표를 보면 우리가 쓰려고했던 ??! 는 C언어에서 | 로 대체된다는것을 알 수 있다.
해결방법
삼중자를 방지하기 위해서 삼중자 중간에 ' \ ' 를 붙여줘야한다.
#include <iostream>
#include <string>
using namespace std;
int main(){
string name;
cin>>name;
cout<<name<<"?\?!"<<endl;
}
'코딩테스트' 카테고리의 다른 글
| 순열과 조합 C++ (1) | 2024.02.13 |
|---|---|
| [BOJ 1920] std::binary_search()를 set에 사용하면 안되는 이유 (이분탐색이 O(n)이 되어버리는 매직) (2) | 2024.01.18 |
| [백준 15651] 완전탐색_브루스포스(Brute Force) (0) | 2023.03.06 |
| [백준 출력] \, ', " cout 에러&이스케이프 시퀀스 알아보기 (0) | 2023.02.10 |
| [백준 1008] cout 소수점 자릿수 정하기 (0) | 2023.02.09 |
- Total
- Today
- Yesterday
- MySQL
- 스페인 교환학생
- 자바스크립트
- 백준
- googleapis
- C++
- 혼공단 SQL
- 혼공단 9기
- 해커톤
- 프로그래머스
- JS
- Linux
- 리눅스
- 혼공
- Signal
- JavaScript
- 교환학생
- 개발
- nodejs
- 공룡책
- AWS
- 혼공단
- 개발일지
- 운영체제
- 프로젝트
- SQL
- Process
- 혼공학습단
- 스페인
- 깃 예제
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |