C++에서 쉼표로 구분 된 문자열 시퀀스 구문 분석
-
std::string::find
및std::string::erase
함수를 사용하여 C++에서 쉼표로 구분 된 문자열 시퀀스를 구문 분석합니다 -
std::getline
함수를 사용하여 쉼표로 구분 된 문자열 시퀀스 구문 분석
이 기사에서는 C++에서 쉼표로 구분 된 문자열 시퀀스를 구문 분석하는 방법에 대한 여러 방법을 보여줍니다.
std::string::find
및std::string::erase
함수를 사용하여 C++에서 쉼표로 구분 된 문자열 시퀀스를 구문 분석합니다
std::find
메소드는std::string
클래스의 내장 함수이며 주어진 하위 문자열의 위치를 찾는 데 사용할 수 있습니다. 이 경우 찾을 하위 문자열을 나타내는 단일 인수를 사용합니다. 다중 문자 문자열 변수를 초기화하여 인수로 전달할 수 있습니다. 다음 예에서는string
을 포함하는 단일 쉼표를 선언합니다. find
메소드는 하위 문자열의 위치를 반환하고 하위 문자열을 찾을 수 없을 때string::npos
를 반환하므로 표현식이 참으로 평가 될 때까지 실행될while
루프에 비교 표현식을 넣을 수 있습니다.
또한vector
컨테이너의 각 반복에 대해 구문 분석 된 문자열을 저장합니다. 그런 다음erase
메소드가 호출되어 다음 반복에서 동일한string
오브젝트 처리를 계속하기 위해 처음 발견 된 쉼표 구분 기호 앞의 문자를 포함합니다. 마지막으로vector
에 저장된 요소를cout
스트림으로 출력합니다.
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::stringstream;
using std::vector;
int main() {
string text = "1,2,3,4,5,6,7,8,9,10";
string delimiter = ",";
vector<string> words{};
size_t pos = 0;
while ((pos = text.find(delimiter)) != string::npos) {
words.push_back(text.substr(0, pos));
text.erase(0, pos + delimiter.length());
}
for (const auto &str : words) {
cout << str << endl;
}
return EXIT_SUCCESS;
}
출력:
1
2
3
4
5
6
7
8
9
std::getline
함수를 사용하여 쉼표로 구분 된 문자열 시퀀스 구문 분석
이전 솔루션은 쉼표로 구분 된 시퀀스에서 마지막 숫자를 추출하지 못했습니다. 따라서 이전 코드 예제에서 조건부 검사를 추가하는 것보다std::getline
함수를 사용하여 다음 방법을 사용하는 것이 더 나을 수 있습니다. getline
은 주어진 입력 스트림에서 문자를 읽어string
객체에 저장합니다. 이 함수는 또한 입력 문자열을 분할 할 구분 기호를 지정하기 위해 선택적 세 번째 인수를 사용합니다. 또한 추출 된 문자열을 나중에 사용하기 위해 각 반복마다std::vector
컨테이너에 저장합니다.
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::stringstream;
using std::vector;
int main() {
string text = "1,2,3,4,5,6,7,8,9,10";
char delimiter = ',';
vector<string> words{};
stringstream sstream(text);
string word;
while (std::getline(sstream, word, delimiter)) {
words.push_back(word);
}
for (const auto &str : words) {
cout << str << endl;
}
return EXIT_SUCCESS;
}
출력:
1
2
3
4
5
6
7
8
9
10
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook