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<int>: 구분된 정수들의 벡터를 의미한다.
주의 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.
'프로그래밍 언어 > C, C++' 카테고리의 다른 글
[Hackerrank] 13. Structs (0) | 2024.02.09 |
---|---|
[Hackerrank] 11. Strings (0) | 2024.02.08 |
[Hackerrank] 09. Variable Sized Array (2) | 2024.02.08 |
[Hackerrank] 08. Arrays Introduction (0) | 2024.02.06 |
[Hackerrank] 07. Pointer (0) | 2024.02.05 |