[백준 11718][🤎3] 그대로 출력하기 (입출력)

Date:     Updated:

카테고리:

태그:

그대로 출력하기

11718번 문제 👉 https://www.acmicpc.net/problem/11718

난이도 👉 브론즈 3

내 풀이

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

int main()
{
    string str;
    
    for(int i = 0; i < 100; i++)
    {
        getline(cin, str);
        cout << str << endl;
    }
    return 0;
}
  • stringgetline을 사용했다.
  • 매 반복마다 버퍼로부터 '\n'을 기준으로 끊어서 읽어들여 str에 저장한다.
    • getline은 ‘\n’을 버퍼에 남기지 않는다. 그냥 무시할뿐!

getline

  • \n 개행 문자(엔터)가 나올 때까지 공백, 띄어쓰기 포함하여 문자들을 다 읽어들인다.
    • 즉 한 줄을 통째로 읽어 들인다.
  • \n이 디폴트 값이며 제한자를 다른 걸로 바꿀 수도 있다.

istream의 getline

istream::cin 의 getline

istream & getline (char * s, streamsize n, char delim);  // delim 디폴트 값은 '\n'
  • 끝에 ‘\0’이 붙는 char *형식의 C 언어 스타일 문자열에 입력하는 방식이다.
  • 즉 인수가 char * 포인터 형식이다.
  • 끝에 ‘\0’을 저장해주어야 해서 ‘\0’이 붙는 것도 고려해야 한다. 따라서 실 문자 개수는 n-1개가 들어가게 된다.
  • n-1개의 문자를 읽어들인다.
// 콘솔 입력 : cin.getline
char str[100];
cin.getline(str, 10);

// 파일 입력 : ifstream 객체에서 getline 호출
char str[100];
ifstream ifs;
ifs.open("input.txt");
ifs.getline(str, 50);

string의 getline

string 의 getline

istream & getline (istream & is, string & str, char delim);  // delim 디폴트 값은 '\n'
  • 입력 스트림이 첫번재 인자로 오고 두번째 인자로는 string 객체를 받는다.
  • string형식의 C++ 언어 스타일 문자열에 입력하는 방식이다.
  • 인수로 char * 포인터 형식을 넣어줘선 안된다!
  • cin.getline과 달리 읽어들일 문자의 개수를 지정하는건 없다.
// 콘솔 입력 
string str;
getline(cin, str);

// 파일 입력 
string str;
ifstream ifs;
ifs.open("input.txt");
getline(ifs, str);

std::cin 과의 차이

getline은 string이든 cin이든 둘 다 해당

  1. cin은 공백, 탭, 엔터를 기준으로 나누어 읽어들인다. 반면에 getline은 오직 엔터 \n을 기준으로 읽어들인다.
  2. cin은 공백, 탭, 엔터를 버퍼에 남긴다. 반면에 getline은 엔터까지 읽어들이면서 엔터를 버퍼에 남기지 않는다. 버퍼에 남기지 않고 그냥 버린다!


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

BOJ 카테고리 내 다른 글 보러가기

댓글 남기기