📅  最后修改于: 2023-12-03 15:13:44.920000             🧑  作者: Mango
分割字符串是处理文本数据非常常见的操作,C++ 中有多种实现分割字符串的方法。
使用 std::stringstream 是一种很方便的方法,它可以把字符串当作流来处理,将其中的单词(以空格分隔)读入一个 std::string 对象中。
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
std::vector<std::string> split_string(const std::string& str) {
std::vector<std::string> tokens;
std::stringstream ss(str);
std::string token;
while (std::getline(ss, token, ' ')) {
tokens.push_back(token);
}
return tokens;
}
int main() {
std::string input = "C++ is a powerful programming language";
std::vector<std::string> tokens = split_string(input);
for (const auto& token : tokens) {
std::cout << token << std::endl;
}
return 0;
}
修改函数的代码,使其支持已经被指定的分隔符。
std::vector<std::string> split_string(const std::string& str, char separator = ' ') {
std::vector<std::string> tokens;
std::stringstream ss(str);
std::string token;
while (std::getline(ss, token, separator)) {
tokens.push_back(token);
}
return tokens;
}
除了自己实现分割字符串的功能,也可以使用 boost 库提供的分割字符串的函数 split。
#include <iostream>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
std::vector<std::string> split_string(const std::string& str, const std::string& separator = " ") {
std::vector<std::string> tokens;
boost::algorithm::split(tokens, str, boost::is_any_of(separator));
return tokens;
}
int main() {
std::string input = "C++ is a powerful programming language";
std::vector<std::string> tokens = split_string(input);
for (const auto& token : tokens) {
std::cout << token << std::endl;
}
return 0;
}
使用 std::stringstream 或者 boost::algorithm::split 都可以方便地实现分割字符串的功能,前者通常比后者更快,但也更难用(需要 C++ 流的知识)。无论哪种方法,都要注意分隔符的选择,因为有些字符在特定的上下文中可能会被认为是特殊符号而出现错误。