[BOJ] 백준 #11718. 그대로 출력하기 (C/C++)
🎨 문제
문제 링크: https://www.acmicpc.net/problem/11718
💬 풀이
C++
C++에서 문자열을 다루는 방법은 두 가지로,
1) C배열을 이용하는 것과 2) C++ 표준 라이브러리에서 제공하는 string 클래스를 사용하는 것이다.
string 클래스는 배열과 달리 문자열 크기에 제약이 없고, 복사/비교/수정 등 문자열을 다루기에 더 쉬우며, 객체지향적이다.
이 string 클래스의 getline() ///////////////////////
std::getline()
string 타입의 C++ 문자열을 입력받는 전역 함수. 문자열을 입력받는데, 공백(‘ ‘)이나 개행(‘\n’)도 입력으로 포함된다.
- 헤더파일: <string> ////////헤더파일이란 용어가 맞는지,,, 클래스 아닌가?
- 원형: istream& getline(istream& istream, string& str, char delimitChar)
- - istream 인자: 입력스트림 오브젝트. ex) cin
- - str 인자: 입력받은 문자열을 저장할 string 객체
- - delimitChar 인자: 구분자. 이 문자에 도달 시 입력 끝. 저장 안 되고 스트림에서 그냥 사라짐.
생략하면 '\n'이 기본.
C
fgets()
’ ‘(공백), ‘\t’, ‘\n’ 세 가지를 구분자로 사용하는 scanf()와 달리, ‘\n’만을 구분자로 사용하는 fgets()는 입력 버퍼의 ‘\n’까지 가져온다. 파일 끝(EOF)에 도달하거나 개행문자(‘\n’)까지, 또는 (두번째 인자 - 1)만큼 문자를 읽는다. 입력 맨 끝에 NULL문자를 추가한다.
- 헤더파일: <stdio.h>
- 원형: char *fgets(char *str, int size, FILE* stream)
- => fgets(문자열, 읽기크기, 파일포인터)
- - str 인자: 입력받은 문자열을 저장할 char배열(버퍼)을 가리키는 포인터
- - size 인자: 입력받을 문자열의 최대길이 + 1. 마지막 NULL문자를 포함 ❗❕주의❗❕
- - stream 인자: 문자열을 읽어들일 스트림의 FILE 객체를 가리키는 포인터.
stdin(=표준입력, =키보드)으로 입력을 받으려면 stdin을 써주면 됨 - 리턴값: 첫 번째 인자 str 리턴, 실패 시 NULL('\0') 리턴
👩💻 코드
C++
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;
int main() {
string str;
for(int i = 0; i < 100 && !cin.eof(); i++) {
getline(cin, str);
cout << str << endl;
}
return 0;
}
C
#include <stdio.h>
int main(void) {
char testString[101];
while (fgets(testString, sizeof(testString) * 100 + 1, stdin)) {
printf("%s", testString);
}
return 0;
}
fgets()는 개행문자 ‘\n’를 받을 때까지, 또는 파일 끝(EOF)에 도달할 때까지, 또는 (두번째 인자 - 1)만큼 문자를 받기 때문에, 문제조건의 최대 100글자를 받기 위해선 100+1을 해줘야 한다.
댓글남기기