1、使用 std::Springstead 和 operator>>
最简洁且符合 C++ 风格的方式。
#include <iostream> #include <sstream> #include <string> int main() { std::string s = "Somewhere down the road"; std::istringstream iss(s); std::string word; while (iss >> word) { std::cout << word << std::endl; } return 0; }
2、使用 std::getline 和 std::istringstream
如果需要按特定分隔符(如逗号、分号等)分割字符串,可以使用 std::getline
。
#include <iostream> #include <sstream> #include <string> int main() { std::string s = "word1,word2,word3"; std::istringstream iss(s); std::string word; while (std::getline(iss, word, ',')) { std::cout << word << std::endl; } return 0; }
3、使用 std::ranges(C++20 及以上)
如果编译器支持 C++20 或更高版本,可以使用 std::ranges
来实现更简洁的代码。
#include <iostream> #include <ranges> #include <string_view> int main() { std::string_view text = "Lorem ipsum dolor sit amet"; for (auto word : text | std::views::split(' ')) { std::cout << std::string_view{word.begin(), word.end()} << std::endl; } return 0; }
4、使用 Boost 库
如使用 Boost 库,可以利用其强大的字符串处理功能,Boost 的 boost::split
函数提供了灵活的分割功能,支持多种分隔符和选项。
#include <boost/algorithm/string.hpp> #include <iostream> #include <string> #include <vector> int main() { std::string s = "Somewhere down the road"; std::vector<std::string> words; boost::split(words, s, boost::is_any_of(" ")); for (const auto& word : words) { std::cout << word << std::endl; } return 0; }