공백이 포함된 문자열 입력 받기 in C++

Purple·2021년 9월 8일
0

1. 공백이 포함된 문자열을 받는 코드

#include <iostream>
#include <string>

using namespace std;
int main() {
	freopen("input.txt", "rt", stdin);
	string ex1, ex2;
	
	cin >> ex1;
	cout << ex1 << "\n";
	
	cout << "---------------------------------------------\n";
	
	freopen("input.txt", "rt", stdin);
	getline(cin, ex2, '\n');
	cout << ex2;
	return 0;
}
  • cin : 띄어쓰기 즉 공백을 기준으로 입력을 받는다. 또한 '\n'를 만나면 이를 저장하지 않고 버퍼에 남기고 그 전까지 있던 입력을 받는다.
  • getline : 3번째 파라미터로 주어지는 것을 기준으로 입력을 분할하여 받는다. default값은 '\n'이다. cin과 달리, '\n'입력자체를 저장할 수 있다.

ex)
"input.txt"가 hello my name is kimjuwon.일때

따라서 cin 과 getline을 이어서 써야 하고, 이 이음새에 '\n'이 존재한다면, getline으로 입력을 받기전에 cin.ignore();를 사용하여 제일 앞의 버퍼 1의 크기만큼을 삭제해해야한다.
이러한 과정은 다음을 통해 확인할 수 있다.

#include <iostream>
#include <string>

using namespace std;
int main() {
	freopen("input.txt", "rt", stdin);
	string ex1, ex2, ex3;
	
	cin >> ex1;
	getline(cin, ex2);
	getline(cin, ex3);
	
	cout << ex1 << '\n';
	cout << ex2 << '\n';
	cout << ex3 << '\n';
	
	cout << "-------------------------------------\n";
	
	freopen("input.txt", "rt", stdin);
	
	cin >> ex1;
	cin.ignore();
	getline(cin, ex2);
	getline(cin, ex3);
	
	cout << ex1 << '\n';
	cout << ex2 << '\n';
	cout << ex3 << '\n';
	
	return 0;
}

ex)
"input.txt"가
apple
banana
peach
일때,

profile
안녕하세요.

0개의 댓글