본문 바로가기
프로그래밍 언어/c c++

[c++] 문자열 입력받기

by m2162003 2020. 4. 11.

문자열 선언 

string s
char c[LENGTH]

 

1. cin>>s

scanf()와 유사하다. 

#include <iostream>

using namespace std;
int main(void){
	string s;
	cin>>s;
}

 

문제점: 공백이 있으면 잘라버림, 개행 못읽음

ex) hello i am a student를 입력하면 hello만 나온다.

 

2. getline(cin, s)

- getline(istream& is, string& str)

- 헤더는 #include <string>

#include <iostream>
#include <string>

string s;
getline(cin, s);

- string을 받으므로 char*형은 받지 못한다.

- getline은 문자열 자르기에도 사용된다.

 

문제점:  엔터(개행문자)까지 읽어버려서 버퍼에 엔터가 들어감.

int x;
string str;

cin>>x;
getline(cin, str); 

x를 입력하면서 받은 엔터(개행문자 \0)가 버퍼에 남아서 getline을 채워버림

 

해결: cin.ignore()

cin>>x;
cin.ignore();
getline(cin, str);

 

cf) 문자열만 연속으로 받을 땐 cin.ignore()없어도 된다. 왜냐? getline이 개행까지 읽어버리기 떄문이다.

cin이 개행문자를 못읽음

cin >> n;
cin.ignore();

for(int i=0; i<n; i++){
 getline(cin, s);
}

 

3. cin.getline(s, sizeof(s))

- cin.getline(char* s, streamsize n)

- #include <iostream>

- 공백 무시, 엔터로 잘림

- length가 필요하기 때문에+char로 받기 때문에 char c[]로 스트링을 선언할시 사용하자

- 문자열 자르기 가능.

 

char c[LENGTH];
string str;

do {
 cin.clear();
 cin.getline(c, LENGTH);
 t += c;
} while(cin.fail())

댓글