
그냥 라이브러리 버퍼 읽어서 ??! 붙여서 다시 출력하는 문자열 문제이다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1;
cin >> s1;
s1 += "??!";
cout << s1;
return 0;
}
string으로 입력 스트림을 받은 다음에
문자열을 이어붙이는 연산자 +를 사용해서 두 문자열을 이어붙여서 출력했다.
이외에도 s.append(s1), s.insert(pos, s1) 을 사용해도 풀이가 가능하다.
// s.append() 사용
#include <iostream>
#include <cstring>
using namespace std;
int main() {
string s1;
cin >> s1;
s1.append("??!");
cout << s1;
return 0;
}
// s.insert() 사용
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1;
cin >> s1;
s1.insert(s1.length(), "??!");
cout << s1 << endl;
return 0;
}
다만, 보통 char 배열 (char[]) 에 문자열을 저장해서 사용한다.
#include <cstdio>
using namespace std;
int main() {
char a[50];
scanf("%s", a);
}
위와같이 char 배열을 선언해주고, (문제에서 id의 최대 길이가 50이라했으니 50개 요소를 담을 수 잇는 배열을 선언) 형식지정자를 %s로 해줘야한다.
추가적으로 scanf에는 &(주소 연산자)를 활용해 주소를 인자로 전달해줘야하는데 여기서는 왜 그냥 배열의 이름만 적어줬을까?
배열은 특이하게도, 배열의 이름만 적는 경우, 배열의 주소를 반환한다. 따라서 굳이 &를 해 줄 필요가 없는 것이다.
#include <cstdio>
using namespace std;
int main() {
char a[50];
scanf("%s", a);
printf("%s??!", a);
return 0;
}
위와같이 해주면된다.
참고로 이 문제는 삼중자(Trigraph Sequence) 관련 문제인데
C++17부터는 삼중자가 무시되므로 고려하지 않아도 되는것 같다.
(자동 비활성화 되어있다고한다.)
삼중자 관련 개념은 https://st-lab.tistory.com/289 해당 링크에 자세히 설명되어있다.