알고리즘 문제를 풀다보면 한 줄의 문자열을 모두 입력받아야 하는 경우가 있다.
이번에 백준 사이트에서 문제를 풀다보니, 관련 문제가 있어서 문제도 풀겸 정리도 하려고 한다.
물론, 문제 내용은 간단하지만, 막상 필요할 때는 생각이 나지 않을 수 있으므로, 알고리즘 테스트나 문제를 풀기 전에 미리 숙지하면 좋지 않을까라는 생각이 드는 내용이다.
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 |
'프로그래밍 > C || CPP' 카테고리의 다른 글
[C || C++] Cpplint로 Google C++ Coding Style Guide 체크해보자. (2) | 2019.03.24 |
---|---|
[C || CPP] C++ 배열 초기화 하는 방법 (fill_n) (0) | 2018.10.14 |
[C++] “Field has incomplete type” error 문제 해결 (0) | 2018.07.11 |
[C | C++] #define 매크로 상수, 함수 정리 (1) | 2018.05.10 |
[C++] 인라인(inline) 함수를 알아보자! (0) | 2018.05.06 |
댓글