[C/C++] stringstream 사용법

한우진·2023년 4월 19일
0

C++

목록 보기
3/4
post-thumbnail

stringstream

개념

C++의 표준 라이브러리의 일부로 'sstream' 헤더 파일에 정의 되어있다. 문자열 스트림으로 작동하며, 일반적인 입출력 스트림처럼 사용할 수 있다.
'stringstream'은 문자열을 읽거나 쓸 때 편리한 방법을 제공하고 문자열로부터 값을 추출하거나 문자열에 값을 삽입할때 사용한다

선언법

#include <sstream>

stringstream을 사용하기 위해 sstream 헤더 파일을 포함

std::istringstream inputStringStream;
std::ostringstream outputStringStream;
std::stringstream stringStream;

istringstream은 입력 스트림으로만
ostringstream은 출력 스트림으로만
stringstream은 입력과 출력 스트림으로 작동한다

istringstream

  • istringstream은 input string stream의 약자
  • 입력 문자열에서 데이터를 읽어오는데 사용
  • 자연스럽게 공백이나 개행문자를 제거하고 원하는 데이터 형태의 문자열만 읽을 수 있다는 장점

예제

#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::string input_string = "10 20 30 40 50";
    std::istringstream iss(input_string);

    int num;
    while (iss >> num) {
        std::cout << "Read number: " << num << std::endl;
    }

    return 0;
}

결과

Read number: 10
Read number: 20
Read number: 30
Read number: 40
Read number: 50

ostringstream

  • output string stream의 약자
  • 데이터를 문자열로 출력하는데 사용된다
  • ostringstream 객체를 사용해 여러 자료형을 문자열로 합쳐준다
  • to_string() 함수를 이용해 문자열이 아닌 여러 자료형들을 문자열로 바꾸고 + 해주는 작업을 한번에 처리한다고 보면 됨
  • 잘 사용하지는 않을 것 같음

예제

#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::ostringstream oss;

    int num1 = 42;
    double num2 = 3.14;
    std::string str = "Hello, C++!";

    oss << "Integer: " << num1 << ", Double: " << num2 << ", String: " << str;

    std::string result = oss.str();
    std::cout << result << std::endl;

    return 0;
}

결과

Integer: 42, Double: 3.14, String: Hello, C++!

stringstream

  • 입출력 스트림을 모두 다룰 수 있는 객체
  • istringstream, ostringstream 기능을 둘 다 포함하고 있다
  • 원하는 문자열을 기준으로 문자열을 나눌 수 있음
  • 공백과 개행문자를 빼고 문자열만 뽑아낼 수 있음
  • 문자열에 여러 자료형을 추가해서 문자열로 변환해 읽고 쓸 수 있음


예제(공백과 개행문자를 제거해 문자열 나누기)

#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::string input_string = "Token1 Token2 Token3\nToken4 Token5";
    std::stringstream ss(input_string);

    std::string token;
    while (ss >> token) {
        std::cout << "Token: " << token << std::endl;
    }

    return 0;
}

결과

Token: Token1
Token: Token2
Token: Token3
Token: Token4
Token: Token5


예제(특정 문자를 기준으로 문자열 나누기)

#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::string input_string = "Item1|Item2|Item3";
    char delimiter = '|';
    std::stringstream ss(input_string);

    std::string token;
    while (getline(ss, token, delimiter)) {
        std::cout << "Token: " << token << std::endl;
    }

    return 0;
}

결과

Token: Item1
Token: Item2
Token: Item3

0개의 댓글