Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- FastAPI
- Image Processing
- study book
- system hacking
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
- 영상처리
- BAEKJOON
- pytorch
- Stream
- BOF
- Dreamhack
- Kaggle
- rao
- llm을 활용 단어장 앱 개발일지
- Flutter
- MDP
- C++
- DART
- ARM
- Widget
- BFS
- fastapi를 사용한 파이썬 웹 개발
- MATLAB
- 백준
- Computer Architecture
- PCA
- Got
- bloc
- Algorithm
- ML
Archives
- Today
- Total
Bull
[C++/lib:sstream] 문자열 파싱하기 (토큰화) 본문
sstream
C++의 sstream 라이브러리는 스트림 기반의 입력/출력을 메모리에서 처리할 수 있게 해주는 클래스들을 제공한다.
이 라이브러리에는 문자열 입력과 출력을 위한 주요 클래스인 istringstream, ostringstream, 그리고 stringstream이 포함되어 있다.
- istringstream (Input String Stream): 문자열에서 데이터를 읽기 위한 스트림이다.
이 클래스를 사용하면 문자열 내용을 마치 입력 스트림처럼 다룰 수 있어서,
복잡한 형태의 데이터를 문자열로부터 파싱(분석)하는 데 유용하다.
- ostringstream (Output String Stream): 데이터를 문자열로 출력하기 위한 스트림이다.
이 클래스는 데이터를 문자열 형태로 변환해야 할 때 사용된다.
예를 들어, 다양한 타입의 데이터를 문자열로 포매팅하고 합치는 작업에 사용될 수 있다.
- stringstream (String Stream): istringstream과 ostringstream의 기능을 모두 가진 클래스로, 데이터를 문자열로 읽고 쓸 수 있는 스트림이다.
이 클래스는 문자열에서 데이터를 읽고, 그 문자열에 데이터를 쓰는 등의 작업이 동시에 필요할 때 유용하다.
정리하자면, sstream 라이브러리는 문자열을 다루는 다양한 상황에서 매우 유용하게 사용된다.
예를 들어, 사용자 입력 검증, 파일로부터 읽은 데이터의 파싱, 데이터의 문자열로의 변환 및 포매팅 등 다양한 작업을 수행할 때 사용할 수 있다.
또한 문자열과 스트림을 사용하여 복잡한 데이터 처리를 보다 쉽게 구현할 수 있게 도와준다.
예시
11024번: 더하기 4
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, N(1 ≤ N ≤ 100)개의 수가 공백으로 구분되어서 주어진다. 입력으로 주어지는 수는 10,000보다 작거나
www.acmicpc.net
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
int main() {
int T;
cin >> T;
cin.ignore(); // enter키로 인해 getline에 입력 방지
string n, num;
for (int i = 0; i < T; i++) {
vector<string> numbers;
int sum = 0;
getline(cin, num); // 10 20 30 40 ... 식으로 받아서 getline을 써야함
stringstream sstream(num); // 토큰화할 문자열
// 스트림에 들어있는 문자열을 공백을 토크나이징하여 n에 저장한다.
while (getline(sstream, n, ' ')) numbers.push_back(n);
for (auto n : numbers) sum += stoi(n);
cout << sum << endl;
}
return 0;
}
1. stream
stringstream sstream(num);
우선 받은 문자열을 stream에 저장한다.
2. stream에 저장된 문자를 토크나이징하여 n에 저장
while (getline(sstream, n, ' ')) numbers.push_back(n);
토큰 '(공백)'을 기준으로 더 이상 토큰이 없으면 null을 반환한다.
getline의 3번째 인자는 원래 아무것도 없으면 '\n'로 인식하여 행 단위로 받고 싶을 때 쓰이지만,
위와 같은 방식으로 '(공백)'을 기준으로 끊어받기 때문에 스트림으로부터 문자를 받아 n에 저장해주는 역할을 할 수 있다.
'Computer Language > C++' 카테고리의 다른 글
[C++] vscode 스니펫 설정 방법 (0) | 2024.03.28 |
---|---|
[C++/lib:algorithm] stable_sort()(안정적으로 정렬) (0) | 2024.03.21 |
[C++/syntax] Lambda (람다식) (1) | 2024.03.15 |
[C++/keyword] noexcept (0) | 2023.09.12 |