본문 바로가기
프로그래밍/C || CPP

[C || C++] 입력 받은 대로 출력하는 방법 (BAEKJOON 11718번 문제)

by _BlankSpace 2018. 10. 14.

알고리즘 문제를 풀다보면 한 줄의 문자열을 모두 입력받아야 하는 경우가 있다.


이번에 백준 사이트에서 문제를 풀다보니, 관련 문제가 있어서 문제도 풀겸 정리도 하려고 한다.


물론, 문제 내용은 간단하지만, 막상 필요할 때는 생각이 나지 않을 수 있으므로, 알고리즘 테스트나 문제를 풀기 전에 미리 숙지하면 좋지 않을까라는 생각이 드는 내용이다.


1. C 에서 개행 문자 입력까지 문자열 입력 받는 방법.

먼저, C에서는 아래와 같은 방법으로 개행이 있을 때까지 입력 받은 문자열을 저장할 수 있다.


1
scanf("%[^\n]s", str);
cs

설명 >> [ ]은 scanset character라고 한다. scanset 에 대한 자세한 내용은 다른 포스팅에서 다루기로 하고..

            여기서 사용된 [^\n]은 입력 값으로 개행 '\n' 문자를 입력 받기 전까지 계속해서 입력받는다는 뜻이다.


2. C++ 에서 개행 문자 입력까지 문자열 입력 받는 방법. 

그럼, C++에서는 어떠한 방법을 사용할 수 있을까..

여기서 사용할 C++ 문자열 자료형을 std::string을 사용할 것이다.

std::string을 사용할 경우에는 아래처럼 사용할 수 있다.


1
2
3
4
std::string s;
while (std::getline(std::cin, s)) {
    std::cout << s << std::endl;
}
cs


설명 >> 먼저 std::getline의 자세한 설명은 다음 링크를 참고하자.

            https://en.cppreference.com/w/cpp/string/basic_string/getline

            

            std::getline(input, str, delim)이 표준이라고 생각하면 되는데.. 각각 파라미터를 보면 다음과 같다.

            input - 데이터를 얻을 스트림

            str - 데이터를 넣을 문자열 변수 공간

            delim - delimiter 문자

            

            delim은 생략할 수 있는데, 이유는 기본 delimiter가 '\n'이기 때문이다. 따라서, 위의 함수로도 개행이 있을 때까지

            모든 입력 문자열을 읽어올 수 있다.


3. 위의 방법으로 문제를 풀어보자.

풀어볼 문제는 Baekjoon 알고리즘 사이트의 11718 번 문제이다.

자세한 문제 내용은 직접 사이트에서 확인해보자.


문제는 아래처럼 입력 받아서 그대로 출력하는 간단한 문제이다.


1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main(void) {
    std::string s;
    while (std::getline(std::cin, s)) {
        std::cout << s << std::endl;
    }
    return 0;
}
cs


댓글