[C++ 언어-막코딩] 16장 stringstream 문자열 처리

in #kr-dev6 years ago (edited)

[C++ 언어-막코딩] 16장 stringstream 문자열 처리



오늘은 문자열 처리를 쉽게 하는 방법을 알아도록 하겠습니다. c언어에서는 문자열 처리를 할 때 근 문장 안에 각각의 문자열들을 쪼개기 위해서는 각 문자열의 첫글자의 위치값을 계산하여 각각의 문자열을 쪼개게 됩니다. 쪼갠 후에도 처리해야 할 코딩이 많아지는데 stringstream 클래스를 이용하면 쉽게 문자열을 쪼개어 관리 할 수 있습니다.

그럼 어떻게 하는지 알아 볼까요.

1. stringstream 클래스


stringstream 객체명;
stringstream 객체명(문자열);

이렇게 선언 할 수 있습니다.

  • 객체명(인자) => string 문자열
  • stringstream(string &s)

인자는 string 문자열 입니다.

예)

string str="aaa bbb ccc"
stringstream sstr(str);

이렇게 선언하면 sstr객체 안에는 "aaa bbb ccc"가 저장 되어 있게 됩니다.
호출 할때는 다음과 같이 호출 됩니다.

string str_buf;
sstr>>str_buf; //"aaa"
sstr>>str_buf; //"bbb"
sstr>>str_buf; //"bbb"

이렇게 매번 '>>'기호로 str_buf 공간에 한개씩 문자열을 추출하여 저장하게 됩니다.

저장은 반대로 하면 됩니다.

sstr<<"aaa"<<' '<<"bbb";

이렇게 '<<'저장하게 되는데 각각의 문자열 사이에 공백(' ')문자를 넣어서 구분해야 합니다.

stringstream 객체변수에 저장과 출력은 위에서 하는 방식으로 간단히 할 수 있는데 실제 코딩을 통해 결과를 확인을 해봐야겠지요.

2. 코딩


[전체소스]

#include <iostream>
#include <string.h>
#include <sstream>

using namespace std;

int main(int argc, char** argv) {
    
    string str="aaa bbb ccc";
    string str_buf; 
    stringstream sstr1(str);
    sstr1>>str_buf;
    cout<<str_buf<<endl;
    sstr1>>str_buf;
    cout<<str_buf<<endl;    
    sstr1>>str_buf;
    cout<<str_buf<<endl;    
    
    int a,b;
    stringstream sstr2;
    sstr2<<100<<' '<<200<<endl;
    
    sstr2>>a>>b;
    cout<<a<<' '<<b<<endl;
    return 0;
}

[결과]

마무리


C언어 때를 생각하면 복잡한 코딩이 사라져 진짜 간단해 졌습니다.

[C언어] CSV 데이터 파일을 strtok()함수로 처리

위 예제에서 문자열 쪼개는 코딩을 보면 답답 할꺼에요. C++ 에서는 이리 간단하게 stringstream 클래스를 이요하면 쉽게 처리되는데 말이죠.

암튼 문자열 처리 할 때 할용하면 유용합니다.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 600K SP virus707 account.

Coin Marketplace

STEEM 0.13
TRX 0.34
JST 0.034
BTC 115338.67
ETH 4511.42
SBD 0.86