[C++] 입출력 데이터 다루기 - 숫자 연산과 문자열 스트림 정리

2026. 4. 28. 21:09·프로그래밍/코드카타

1. 이번 챕터에서 배운 것

코딩 테스트 문제를 풀다 보면 입력값을 파싱하고 변환하는 데 생각보다 많은 시간을 쓰게 된다. 이번 강의에서는 C++에서 자주 쓰이는 숫자 처리 함수 3가지와, 문자열을 스트림처럼 다루는 stringstream 활용법을 집중적으로 다뤘다.

모든 수학 함수(round, ceil, floor)는 #include <cmath> 헤더가 필요하고, 문자열 스트림 관련 기능은 #include <sstream>이 필요하다.


2. 숫자 다루기 — cmath 함수 3종

함수 동작 양수 예 음수 예
round(x) 반올림 (0.5는 0에서 먼 쪽) round(3.5) → 4 round(-2.5) → -3
ceil(x) 올림 ceil(3.2) → 4 ceil(-3.2) → -3
floor(x) 내림 floor(3.7) → 3 floor(-3.7) → -4

주의: floor(-3.7)은 단순히 소수점을 버린 -3이 아니라 -4다. 음수에서 내림은 숫자가 더 작아지는 방향(더 음수)으로 간다.


3. stringstream — 문자열을 스트림처럼

stringstream은 문자열을 마치 cin처럼 다룰 수 있게 해주는 클래스다. 이미 갖고 있는 문자열에서 특정 타입의 값을 순서대로 추출하거나, 반대로 값을 문자열로 변환할 때 매우 유용하다.

공백 기준 분리

string str = "123 X 67";
stringstream stream(str);
int num; char c; float f;
stream >> num >> c >> f;
// num=123, c='X', f=67.0

4. 특정 문자 기준 분리 — getline

공백 외에 쉼표나 슬래시 같은 특정 문자로 구분된 문자열을 분리할 때는 getline(스트림, 버퍼, 구분자)를 사용한다.

string text = "apple,banana,grape,orange";
stringstream ss(text);
string token;
while (getline(ss, token, ',')) {
    cout << token << endl;
}
// apple / banana / grape / orange

패턴 정리: >>는 공백 기준 분리, getline(ss, buf, 구분자)는 특정 문자 기준 분리.


5. 진법 변환 — hex 조작자 활용

10진수 → 16진수

int n = 4095;
stringstream ss;
ss << hex << n;
string h = ss.str(); // "fff"

16진수 → 10진수

string h = "ff";
stringstream ss(h);
int n;
ss >> hex >> n; // n = 255

방향 기억법: 10→16은 <<(출력 방향으로 넣기), 16→10은 >>(추출 방향으로 읽기).


6. 오늘의 회고

지금까지 입력값 파싱은 cin만 쓰거나 손으로 처리해왔는데, stringstream 하나로 타입 변환과 구분자 분리가 깔끔하게 해결된다는 게 인상적이었다. 특히 16진수 변환 시 hex 조작자를 쓰는 방식은 외워두면 실전에서 시간을 많이 아낄 수 있을 것 같다. 음수에서 floor와 단순 소수점 버리기의 차이는 헷갈리기 쉬운 부분이므로 따로 정리해뒀다.

'프로그래밍 > 코드카타' 카테고리의 다른 글

[C++] 코딩테스트에서의 정렬  (0) 2026.05.11
[C++] 코딩테스트에서의 배열  (0) 2026.05.07
[C++] 재귀 함수를 코드로  (0) 2026.05.06
[코딩 테스트] 어떻게 준비하고 어떻게 풀어야 할까?  (1) 2026.04.27
[코드카타] 프로그래머스 - 전력망을 둘로 나누기 (C++)  (0) 2026.04.07
'프로그래밍/코드카타' 카테고리의 다른 글
  • [C++] 코딩테스트에서의 배열
  • [C++] 재귀 함수를 코드로
  • [코딩 테스트] 어떻게 준비하고 어떻게 풀어야 할까?
  • [코드카타] 프로그래머스 - 전력망을 둘로 나누기 (C++)
hanong8
hanong8
hanong8 님의 블로그 입니다.
  • hanong8
    HaNong
    hanong8
  • 전체
    오늘
    어제
    • 분류 전체보기 (101) N
      • 프로그래밍 (98) N
        • Unreal Engine 5 (45)
        • C++ (22)
        • UML (2)
        • 자료구조 (2)
        • 알고리즘 (9)
        • 개발일지 (4)
        • DirectX11 (5)
        • Git (2)
        • 코드카타 (7) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
hanong8
[C++] 입출력 데이터 다루기 - 숫자 연산과 문자열 스트림 정리
상단으로

티스토리툴바