C++에서 공백으로 문자열 분할

Jinku Hu 2023년10월12일
  1. std::string::findstd::string::substr함수를 사용하여 C++에서 공백으로 문자열 분할
  2. std::istringstreamstd::copy를 사용하여 C++에서 공백으로 문자열 분할
  3. std::getlineerase-remove관용구를 사용하여 C++에서 공백으로 문자열 분할
C++에서 공백으로 문자열 분할

이 기사에서는 C++에서 공백 구분 기호로 문자열을 분할하는 방법에 대한 여러 방법을 보여줍니다.

std::string::findstd::string::substr함수를 사용하여 C++에서 공백으로 문자열 분할

findsubstr은 문자열 값 또는 단일 문자로 지정된 구분 기호로 문자열을 분할하는 데 사용할 수있는std::string 내장 함수입니다. find 함수는string 인수를 받아 주어진 하위 문자열이 시작되는 위치를 반환합니다. 그렇지 않으면 찾을 수 없으면string::npos가 반환됩니다. 따라서find 함수가npos를 반환 할 때까지while 루프를 반복합니다. 한편, ‘substr’메서드는 구분 기호 앞의 문자열 부분에 액세스하는 데 사용할 수 있습니다.이 경우에는 단일 공백 ​​문자이고 나중에 사용하기 위해 ‘벡터’에 저장합니다. 그런 다음erase 함수를 호출하여 구분 기호를 포함한 첫 번째 시퀀스를 제거합니다.이 시점에서 새 반복이 작업을 반복 할 수 있습니다.

#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::istringstream;
using std::string;
using std::stringstream;
using std::vector;

int main() {
  string text =
      "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
      "Sed laoreet sem leo, in posuere orci elementum.";
  string space_delimiter = " ";
  vector<string> words{};

  size_t pos = 0;
  while ((pos = text.find(space_delimiter)) != string::npos) {
    words.push_back(text.substr(0, pos));
    text.erase(0, pos + space_delimiter.length());
  }
  for (const auto &str : words) {
    cout << str << endl;
  }

  return EXIT_SUCCESS;
}

출력:

Lorem
ipsum
dolor
sit
amet,
consectetur
adipiscing
elit.
Sed
laoreet
sem
leo,
in
posuere
orci

std::istringstreamstd::copy를 사용하여 C++에서 공백으로 문자열 분할

또는string기반 스트림에 대한 입력 / 출력 작업을 제공하는istringstream클래스를 사용하여 코드를 다시 구현할 수 있습니다. 분할해야하는string값으로istringstream객체를 초기화하면std::copy알고리즘을 호출하여 각 공백으로 구분 된 문자열 값을cout스트림에 출력 할 수 있습니다. 이 메소드는istringstream클래스의 구현이 제공하는 것이기 때문에 공백 구분 기호 분할 만 지원합니다.

#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::istringstream;
using std::string;
using std::stringstream;
using std::vector;

int main() {
  string text =
      "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
      "Sed laoreet sem leo, in posuere orci elementum.";
  vector<string> words{};

  istringstream iss(text);
  copy(std::istream_iterator<string>(iss), std::istream_iterator<string>(),
       std::ostream_iterator<string>(cout, "\n"));

  return EXIT_SUCCESS;
}

std::getlineerase-remove관용구를 사용하여 C++에서 공백으로 문자열 분할

이전 솔루션의 한 가지 단점은 구문 분석 된 단어와 함께 저장된 구두점 기호입니다. 그것은 본질적으로 주어진 범위에 대한 조건부 제거 작업 인 erase-remove 관용구로 해결할 수 있습니다. 이 경우std::getline에 의해 검색된 각 단어에 대해이 메서드를 호출하여 모든 구두점 기호를 잘라냅니다. ispunct함수 오브젝트는 구두점 문자를 확인하기 위해remove_if알고리즘에 세 번째 인수로 전달됩니다.

#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::istringstream;
using std::string;
using std::stringstream;
using std::vector;

int main() {
  string text =
      "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
      "Sed laoreet sem leo, in posuere orci elementum.";
  char space_char = ' ';
  vector<string> words{};

  stringstream sstream(text);
  string word;
  while (std::getline(sstream, word, space_char)) {
    word.erase(std::remove_if(word.begin(), word.end(), ispunct), word.end());
    words.push_back(word);
  }

  for (const auto &str : words) {
    cout << str << endl;
  }

  return EXIT_SUCCESS;
}

출력:

Lorem
ipsum
dolor
sit
amet
consectetur
adipiscing
elit
Sed
laoreet
sem
leo
in
posuere
orci
elementum
작가: 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