c++ 문자열 입력받기 (getline, stringstream, tokenize)

여러 줄의 문자열, 숫자 를 space, comma 를 구분하며 여러줄을 입력받을때

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

using namespace std;

int main()
{
    int cnt;
    string str;
    vector<vector<string>> strs;

    cin >> cnt;
    string line;
    getline(cin, line);
    strs.resize(cnt);
    for (int i = 0; i <cnt; ++i) {
        string cur;       
        getline(cin, cur);
        stringstream ss(cur);
        while (getline(ss, str, ',')) {
            strs[i].push_back(str);
        }
    }
    for (auto& el : strs) {
        for (auto& elIn : el) {
            cout << elIn << endl;
        }
    }
}

cin >> xxx;
cin 은 개행문자를 입력받지 않는다
5\n 을 처음 입력시 5에 대해서 cnt 에 저장하고 남은 \n 은 getline 으로 받고 버려줍니다
(다른 방법도 있지만 코딩테스트 때의 입력 데이터를 만들 기 위해서는 간단하게 data 만 만들기 위함)

해당 횟수만큼의 row 를 입력하는 케이스가 보통이니 그만큼의 횟수의 row 를 입력할테고 대부분은 space 로 구분 하거나 (숫자나 space 가 없는 스트링의경우) space 가 있는 string 이 있을 수 있다면 아마 csv 처럼, 로 구분해 입력 하게 됩니다

string cur;
getline(cin, cur);
stringstream ss(cur);
while (getline(ss, str, ‘,’)) {
strs[i].push_back(str);
}

위 처럼 각 line 을 받아 stringstream 에 넣고 getline 의 delimeter 파라메터를 통해서 구분자를 통해 분리해 각 데이터에 쌓을 수 있습니다


댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다