[Hackerrank] C++ - 10 StringStream

후유카와·2024년 11월 22일

Hackerrank

목록 보기
10/59

10. StringStream

[ 난이도: Easy | 분야: Strings ]

1. 내용 정리

이번 챌린지에서는, string stream을 다룰 것이다.

StringStream이란 string을 조작하는 stream class이다. 이것은 메모리 기반 I/O 동작 stream을 사용한다.

StringStream은 다른 자료형을 사용할 때 도움이 된다.

아래 연산자/함수들은 많이 사용된다:

- 연산자 >> : 형식화된 데이터를 추출한다.

- 연산자 << : 형식화된 데이터를 삽입한다.

- Method str() : string device object에 있는 콘텐츠를 가져온다.

- Method str(string) : string device object에 있는 콘텐츠를 설정한다.

이것의 헤더 파일은 sstream이다.

한 가지 대표적인 예시는 문자열에서 comma-separated integers를 분리하는 것이다.(예시. "23,4,56")

stringstream ss("23,4,56");
char ch;
int a, b, c;
ss >> a >> ch >> b >> ch >> c; // a = 23, b = 4, c = 56

여기서 ch는 버려지는 쉼표를 저장하기 위해 사용된다.

만약 >> 연산자가 값을 반환하면, 이는 올바르게 연산자를 사용한 것이다.

값을 반환하지 못한다면, 이는 연산자를 올바르지 않게 사용한 것이다.

끝이 없는 쉼표로 구분된 정수들의 문자열이 주어진다면, 정수들의 벡터를 반환한다.

함수 설명

parseInts 함수를 완성해라.

parseInts는 아래의 파라미터를 가진다:

- string str: 쉼표로 구분된 정수들의 문자열을 의미한다.

반환

vector: 구분된 정수들의 벡터를 의미한다.

주의 STL 단원의 첫 번째 문제를 해결했다면 벡터의 요소들을 밀어넣는 방법을 알 것이다.

입력 형식

쉽표로 구분된 n개의 정수들이 한 줄에 모두 포함되어 있다.

제약 사항

str의 길이는 8*10^5보다 작다.

입력 예시

23, 4, 56

출력 예시

23
4
56

문제

#include <sstream>
#include <vector>
#include <iostream>
using namespace std;

vector<int> parseInts(string str) {
	// Complete this function
}

int main() {
    string str;
    cin >> str;
    vector<int> integers = parseInts(str);
    for(int i = 0; i < integers.size(); i++) {
        cout << integers[i] << "\n";
    }
    
    return 0;
}

더보기

정답

#include <sstream>
#include <vector>
#include <iostream>
using namespace std;

vector<int> parseInts(string str) {
	// Complete this function
    stringstream ss(str);
    vector<int> myInt;
    int myNum;
    char ch;
    while(ss >> myNum) {
        myInt.push_back(myNum);
        if(!(ss >> ch)) break;
    }
    return myInt;
}

int main() {
    string str;
    cin >> str;
    vector<int> integers = parseInts(str);
    for(int i = 0; i < integers.size(); i++) {
        cout << integers[i] << "\n";
    }
    
    return 0;
}

ⓒ Hackerrank. All Rights Reserved.

profile
안녕하세요! 저는 전자공학을 전공하며 하드웨어와 소프트웨어 모두를 깊이 있게 공부하고 있는 후유카와입니다. Verilog HDL, C/C++, Java, Python 등 다양한 프로그래밍 언어를 다루고 있으며, 최근에는 알고리즘에 대한 학습에 집중하고 있습니다. 기술적인 내용을 공유하고, 함께 성장할 수 있는 공간이 되기를 바랍니다. 잘못된 내용이나 피드백은 언제나 환영합니다! 함께 소통하며 더 나은 지식을 쌓아가요. 감사합니다!

0개의 댓글