<sstream>: stringstream 정리

nana·2025년 1월 30일

c++ 정리

목록 보기
4/6

C++의 라이브러리: 문자열을 스트림처럼 다룰 수 있는 기능 제공
예) 문자열 파싱, 변환, 포맷팅 등

1. std::stringstream 기본 사용법

문자열을 숫자로 변환 (>> 연산자 사용)

#include <iostream>
#include <sstream>  // stringstream 사용

int main() {
  std::string str = "123";
  int num;

  std::stringstream ss(str);  // 문자열을 스트림으로 만듦
  ss >> num;  // 문자열 → 정수 변환

  std::cout << "정수 변환 결과: " << num + 10 << '\n';  // 133
}

숫자를 문자열로 변환 (<< 연산자 사용)

#include <iostream>
#include <sstream>

int main() {
  int num = 456;
  std::stringstream ss;

  ss << num;  // 정수를 문자열로 변환
  std::string str = ss.str();

  std::cout << "문자열 변환 결과: " << str << '\n';  // "456"
}

문자열을 공백 기준으로 분할 (토큰화)

#include <iostream>
#include <sstream>
#include <vector>

int main() {
    std::string sentence = "C++ is awesome";
    std::stringstream ss(sentence);
    std::string word;
    std::vector<std::string> words;

    while (ss >> word) {  // 공백을 기준으로 단어 추출
        words.push_back(word);
    }

    for (const auto &w : words) std::cout << w << '\n';
}
/*출력결과
C++
is
awesome 
*/

특정 구분자로 문자열 분할 ( , 등)

공백이 아니라 , 같은 특정 문자로 분할하려면 getline() 사용!

#include <iostream>
#include <sstream>
#include <vector>

int main() {
    std::string data = "apple,banana,grape";
    std::stringstream ss(data);
    std::string item;
    std::vector<std::string> items;

    while (getline(ss, item, ',')) {  // ',' 기준으로 분할
        items.push_back(item);
    }

    for (const auto &fruit : items) std::cout << fruit << '\n';
}
/*출력결과
apple
banana
grape
*/

clear()와 str()을 사용한 스트림 초기화

#include <iostream>
#include <sstream>

int main() {
    std::stringstream ss;
    ss << 100;
    std::cout << "첫 번째 값: " << ss.str() << '\n';

    ss.str("");   // 기존 문자열 비우기
    ss.clear();   // 스트림 상태 초기화

    ss << 200;
    std::cout << "두 번째 값: " << ss.str() << '\n';
}

ss.get()

#include <iostream>
#include <sstream>

int main() {
  std::stringstream ss("Hello");

  char ch;
  ss.get(ch);  // 첫 번째 문자 읽기

  std::cout << "첫 글자: " << ch << '\n';  // 'H'
}

0개의 댓글