favicon Jay Lee DevLog

📚 목차

stringstream은 아래의 글을 쓰다가 더 좋은 답안이 있어서 정리하게 되었다.

프로그래머스 코딩테스트 입문 난이도 - OX퀴즈 (tistory.com)

 

일단 헤더파일은

#include <sstream> // stringstream 사용하기 위해 추가

위에 ssstream을 추가하면 된다.

 

이번엔 stringstream을 사용해서 위의 OX퀴즈를 풀어보았다.

 

    stringstream ss;
    vector<string> vStr, vResult;
    vStr.push_back("1 + 2 = 3");
    vStr.push_back("2+7=2");

일단  vStr에 문제를 넣어봤다.

첫번째 문제는 코딩테스트와 같은 형태로 넣어봤고,

두번째 문제는 빈칸이 없을땐 어떻게 되나 싶어서 넣어봤다.

 

일단 stringstream은 

string기준으로 한글자 한글자를 처리하는? 그런 기능을 가지고 있는 것 같았다.

예를 들면,

    int nA, nB, nResult, nRealResult = 0;
    char strOP, strOP2;

    for (auto i : vStr)
    {
        ss.str(i);
        ss >> nA;
        ss >> strOP;
        ss >> nB;
        ss >> strOP2;
        ss >> nResult;

        switch (strOP)
        {
        case '+':
            nRealResult = nA + nB;
            break;

        case '-':
            nRealResult = nA - nB;
            break;
        }

        if (nRealResult == nResult)
            cout << i << " result = " << "O" << endl;
        else
            cout << i << " result = " << "X" << endl;

        ss.clear();
    }

 

이런식으로 코드를 짜면 위의 두 문제에 대해 정상적인 값을 가져올 수 있었다.

현재 첫 번째 string은 "1 + 2 = 3" 이고,

        ss.str(i);
        ss >> nA;
        ss >> strOP;
        ss >> nB;
        ss >> strOP2;
        ss >> nResult;

ss.str()을 통해 stringstream에 "1 + 2 = 3" 값을 넣어준 뒤,

">>" 를 통해 int형인 nA에 첫번째 문자인 "1"을 넣어줄 수 있다.

 

그 다음에는 부호인 "+"를 넣어줘야 하기 때문에

char형인 strOP를 ">>" 해주면 정상적으로 "+" 값이 들어간다.

이런 식으로 나머지 값도 다 넣어주면

nA = 1

strOP = "+"

nB = 2

strOP2 = "="

nResult = 3

의 값이 들어있게 된다.

 

내가 두번째 문항인 띄어쓰기가 없는

"2+7=2"를 넣은 이유는,

처음엔 char strOP, strOP2가 아닌

string strOP, strOP2로 해봤는데,

nA = 2

strOP = "+7=2"

이렇게 들어가는 현상을 확인했다.

 

그래서 그냥 내 개인적인 추측으로 

1바이트인 char로 바꿔주면 정상적으로 되지 않을까 싶어서 바꿔봤는데,

잘 동작했다.

string 문자"열"이기 때문에 이런 현상이 발생하는 것 같다.

 

결론은

stringstream은 string으로 된 데이터가 있을 때,

만약 같은 형태의 구분자로 값들이 구분될 경우에는

순차적으로 원하는 타입의 변수에 값을 알아서 변경시켜 넣어주는 것 같다.

 

다만 구분자가 들쑥날쑥 하거나,

없을 경우에는 데이터 타입을 고려하여 사용해야 할 것 같다.

 

여튼 좋은거 하나 또 배워간다.

델파이에는 비슷한 걸로 stringList가 있는데, 유용하게 많이 사용했기 때문에

이것도 자주 사용할 수 있을 것 같다.

 

'C, C++ > 기술노트' 카테고리의 다른 글

가변인자  (0) 2023.08.10
람다식  (0) 2023.07.27
Template  (0) 2023.07.26

+ Recent posts

/ /

Contact

📧 dlwjdwls60@naver.com


블로그에 내용이 있으면 해당 글을 보여주며, 없으면 내용이 복사된 채로 ChatGPT로 연결됩니다.