[BOJ] C++ 입출력 관련 문제들
카테고리: BOJ
태그: Coding Test Cpp Algorithm
⭕
정답. 배운 점이 있거나 고민이 많았어서 필기하고 싶은 문제⏰
시간 초과❌
오답 & 중도 포기
🔔 10953 : A + B (6)
내 풀이
#include <stdio.h>
using namespace std;
int main()
{
int n, a, b;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d,%d", &a, &b);
printf("%d\n", a + b);
}
return 0;
}
scanf("%d,%d", &a, &b);
- “1,3” 이런식으로 어떤 형식에 따라 입력을 받을 땐
cin
보다는scanf
를 쓰는게 편한 것 같다.- 어떤 문자열 형식에 따라 입출력 해야할 땐
<stdio>
인클루딩한 후scanf
와printf
를 사용하자.
- 어떤 문자열 형식에 따라 입출력 해야할 땐
- “1,3” 이런식으로 어떤 형식에 따라 입력을 받을 땐
🔔 11718 : 그대로 출력하기 ⭕
내 풀이
#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;
}
string
의getline
을 사용했다.- 매 반복마다 버퍼로부터 '\n'을 기준으로 끊어서 읽어들여 str에 저장한다.
getline
은 ‘\n’을 버퍼에 남기지 않는다. 그냥 무시할뿐!
공백 포함하여 한 줄 입력 받기
\n
개행 문자(엔터)가 나올 때까지 공백, 띄어쓰기 포함하여 문자들을 다 읽어들인다.- 즉 한 줄을 통째로 읽어 들인다.
\n
이 디폴트 값이며 제한자를 다른 걸로 바꿀 수도 있다.
std::cin.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의 std::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);
(cin « )입력과의 차이
getline
은 string이든 cin이든 둘 다 해당
cin
은 공백, 탭, 엔터를 기준으로 나누어 읽어들인다. 반면에getline
은 오직 엔터\n
을 기준으로 읽어들인다.cin
은 공백, 탭, 엔터를 버퍼에 남긴다. 반면에getline
은 엔터까지 읽어들이면서 엔터를 버퍼에 남기지 않는다. 버퍼에 남기지 않고 비운다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기