C++ 按分隔符拆分字符文本
主要有两种方法,一种使用boost::split()
分割,一种使用stringstream+getline()
分割
使用boost::split()函数分割字符文本
Boost 提供了强大的工具,可以使用成熟且经过良好测试的库来扩展 C++ 标准库
#include <boost/algorithm/string.hpp>
boost::split(type, select_list, boost::is_any_of(token), boost::token_compress_on);
type
: 类型是std::vectorstd::string,用于存放切割之后的字符串select_list
:传入的字符串,可以为空boost::is_any_of(token)
:设定切割符tokenboost::token_compress_on
: 将连续多个分隔符当一个,默认没有打开,用的时候一般要打开
📌 split()切割的string为空时,是可以切割出来一个空字符的
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <boost/algorithm/string/split.hpp>
using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector;
using std::stringstream;
int main() {
string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
vector<string> words;
boost::split(words, text, isspace, boost::token_compress_on);
for (const auto &item : words) {
cout << item << "; ";
}
cout << endl;
return EXIT_SUCCESS;
}
Lorem; ipsum; dolor; sit; amet,; consectetur; adipiscing; elit.;
使用stringstream + getline()分割字符文本
这种情况下,只使用 STL 工具,不需要包含 Boost 头文件
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector;
using std::stringstream;
int main() {
string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
vector<string> words;
char space_char = ' ';
stringstream sstream(text);
string word;
while (std::getline(sstream, word, space_char)) {
words.push_back(word);
}
for (const auto &item : words) {
cout << item << "; ";
}
cout << endl;
return EXIT_SUCCESS;
}
Lorem; ipsum; ; dolor; sit; amet,; consectetur; adipiscing; elit.;