C++에서 공백으로 문자열 분할
-
std::string::find
및std::string::substr
함수를 사용하여 C++에서 공백으로 문자열 분할 -
std::istringstream
및std::copy
를 사용하여 C++에서 공백으로 문자열 분할 -
std::getline
및erase-remove
관용구를 사용하여 C++에서 공백으로 문자열 분할
이 기사에서는 C++에서 공백 구분 기호로 문자열을 분할하는 방법에 대한 여러 방법을 보여줍니다.
std::string::find
및std::string::substr
함수를 사용하여 C++에서 공백으로 문자열 분할
find
및substr
은 문자열 값 또는 단일 문자로 지정된 구분 기호로 문자열을 분할하는 데 사용할 수있는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::istringstream
및std::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::getline
및erase-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
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