[BOJ] 백준 #11718. 그대로 출력하기 (C/C++)

1 분 소요

🎨 문제

boj-11718 문제 링크: 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을 해줘야 한다.

댓글남기기