민팽로그

[c++] 공백 포함하여 문자열 입력 받기 본문

C++

[c++] 공백 포함하여 문자열 입력 받기

민팽 2022. 4. 25. 18:38

1. std::getline(std::istream & _Istr, std::string &_Str, char _Delim)

- <string> 헤더파일을 추가해줘야 함

- 입력 스트림으로부터 문자열을 읽어 string 변수에 값을 넣어줌

- 구분자로 사용할 문자를 설정해 줄 수도 있음(default는 \n임)

#include <iostream>
#include <string>
using namespace std;

int main() {
	string s1, s2;
	cout << "----입력----" << endl;
	getline(cin, s1);
	getline(cin, s2);
	cout << "----출력----" << endl;
	cout << s1 << endl;
	cout << s2 << endl;
	return 0;
}

 

실행 결과를 보면 개행 문자를 입력 버퍼에 남겨두지 않는 것 같음.

 

 

 

 

 

 

2. cin.getline(char *_Str, std::streamsize _Count, char _Delim)

- 입력받은 문자를 저장할 char 배열 형식의 배열, 입력받을 문자열의 최대 길이를 인자로 갖음

- 마찬가지로 구분자로 사용할 문자를 설정해 줄 수도 있음(default는 \n임)

#include <iostream>
#include <string>
using namespace std;

int main() {
	char s1[20], s2[20];
	cout << "----입력----" << endl;
	cin.getline(s1, 20);
	cin.getline(s2, 20);
	cout << "----출력----" << endl;
	cout << s1 << endl;
	cout << s2 << endl;
	return 0;
}

 

마찬가지로 개행 문자를 입력 버퍼에 남겨두지 않음.

개행 문자는 저장하지 않고 배열에 저장할 때 널 문자로 대체함.

 

 

 

 

 

3. cin.get(char *_Str, std::streamsize _Count, char _Delim)

- cin.getline과 같은 매개변수 사용

#include <iostream>
#include <string>
using namespace std;

int main() {
	char s1[20], s2[20];
	cout << "----입력----" << endl;
	cin.get(s1, 20);
	cin.get(s2, 20);
	cout << "----출력----" << endl;
	cout << s1 << endl;
	cout << s2 << endl;
	return 0;
}

 

처음에 문자열을 입력 후 엔터를 치면 다음 입력을 받지 않음.

버퍼에 개행문자를 남겨두기 때문에 다음 입력으로 해당 개행문자가 넘어감.

 

 

 

 

 

따라서 아래와 같이 cin.get()를 한번 더 호출하여 개행 문자를 버퍼에서 지워줌.

#include <iostream>
#include <string>
using namespace std;

int main() {
	char s1[20], s2[20];
	cout << "----입력----" << endl;
	cin.get(s1, 20);
	cin.get();
	cin.get(s2, 20);
	cout << "----출력----" << endl;
	cout << s1 << endl;
	cout << s2 << endl;
	return 0;
}

 

입력 버퍼에 개행문자가 남아있지 않아 다음 입력을 받을 수 있음.

 

 

 

 

 

 

 

+ cin.get에 아무 인자를 넘겨주지 않으면 문자 하나를 읽음.

#include <iostream>
#include <string>
using namespace std;

int main() {
	cout << "----입력----" << endl;
	char a = cin.get();
	char b = cin.get();
	char c = cin.get();
	char d = cin.get();
	cout << "----출력----" << endl;
	cout << a << b << c << d;
	cout << "----끝----";
	return 0;
}

입력된 값: h i\n(엔터)

 

 

 

 

 

 

 

참조

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=daimon123&logNo=220465985570 

 

 

 

 

Comments