본문 바로가기

PL/C & C++

[C++] 문자열 입력

한 줄을 입력받아 저장할 수 있는 getline 함수를 사용 

cin

  • <iostream>에 포함되어 있다.
  • 표준 입력 버퍼에서 개행 문자를 제외한 값을 가져온다.
  • 공백이나 개행 입력 시 공백 이전까지의 값만 결과로 받아들인다.
  • 개행 문자를 입력 버퍼에 남겨둔다.

이때 hello 같은 문자열이라면 문제 없이 입력을 받지만 Hello World!와 같이 띄어쓰기가 포함된 문장이라면 Hello 까지 밖에 입력이 되지 않을 것이다.
cin의 >> 연산자에서는 공백문자에서 입력을 끊기 때문인데, 이러한 문제를 해결하기 위해서 getline()이라는 함수를 사용한다.

 

getline()

getline()함수는 두 가지가 존재하는데 각가 다른 라이브러리에 존재한다. istream 라이브러리에 속한 cin.getline()함수와 string 라이브러리에 속하는 getline()함수가 있다.

 

istream 라이브러리의 cin.getline()

  • 문자 배열이며 마지막 글자가 ‘\0’(terminator)인 c-string을 입력 받는데 사용
  • n-1개의 문자 개수만큼 읽어와 str에 저장 (n번째 문자는 NULL(‘\0’)로 바꾼다.)
  • 세 번째 인자인 delim은 별도로 지정해주지 않으면 엔터(‘\n’)로 인식
  • delim을 지정해주면 그 제한자(delim)문자 직전까지 읽어서 str에 저장

cin.getline(변수 주소, 최대 입력 가능 문자수, 종결 문자);
ex) cin.getline(str, 100);

  • string 라이브러리의 getline()
    • 최대 문자 수를 입력하지 않아도 됨.
    • 원하는 구분자(delimiter)를 만날 때 까지 모든 문자열을 입력 받아 하나의 string 객체에 저장

getline(입력스트림 오브젝트, 문자열을 저장할 string객체, 종결 문자);
ex) getline(cin, str);

 

주의

getline() 함수를 사용할 때 주의할 점이 있다.

위와 같은 상황을 보자. 위 코드대로 실행을 하면 n을 입력 받은 후 문자열을 입력받지 않고 바로 다음 코드로 넘어가게 된다. 이유는 버퍼에 정수 값을 입력한 뒤 누른 엔터(‘\n’)가 그대로 남아있어 getline()에 들어가기 때문이다. 이를 해결하기 위해 cin.ignore() 라는 함수를 사용할 수 있다.

 

위와 같이 변경하면 cin.ingore()가 입력 버퍼의 모든 내용을 제거해주어 getline()이 정상적으로 동작할 수 있다.

추가적으로 cin.ignore() 함수에 대해 알아보자면
cin.ignore(int n, char dlim);
cin.ignore(읽어들일 문자의 개수, 종결 문자);
와 같은 형태로도 사용이 가능하다.

 

 

 

<백준 알고리즘> 11718번 그대로 출력하기

그대로 출력하기 성공 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 256 MB 68533 14201 11439 25.778% 문제 입력 받은 대로 출력하는 프로그램을 작성하시오. 입력 입력이 주어진다. 입력

kih0902.tistory.com

 

C++ 입력 함수 - cin, cin.get(), getline() - kwon | kwon's Blog

cin 에 포함되어 있다. 표준 입력 버퍼에서 개행 문자를 제외한 값을 가져온다. 공백이나 개행 입력 시 공백 이전까지의 값만 결과로 받아들인다. 개행 문자를 입력 버퍼에 남겨둔다. 1234567int n;cin

kyu9341.github.io

 

'PL > C & C++' 카테고리의 다른 글

[C++] char to int  (0) 2021.03.04
[C++] vector 탐색  (0) 2021.03.01
[C++] 배열 초기화  (0) 2021.02.26
[C++] 문법 카테고리  (0) 2021.02.26
[C++] vector 정렬  (0) 2021.02.26