C++에서 쉼표로 구분 된 문자열 시퀀스 구문 분석

Jinku Hu 2023년10월12일
  1. std::string::findstd::string::erase함수를 사용하여 C++에서 쉼표로 구분 된 문자열 시퀀스를 구문 분석합니다
  2. std::getline함수를 사용하여 쉼표로 구분 된 문자열 시퀀스 구문 분석
C++에서 쉼표로 구분 된 문자열 시퀀스 구문 분석

이 기사에서는 C++에서 쉼표로 구분 된 문자열 시퀀스를 구문 분석하는 방법에 대한 여러 방법을 보여줍니다.

std::string::findstd::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
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

관련 문장 - C++ String