通过多个分隔符将字符串拆分为单词

新手上路,请多包涵

我有一些文本(有意义的文本或算术表达式),我想将其拆分为单词。

如果我有一个分隔符,我会使用:

 std::stringstream stringStream(inputString);
std::string word;
while(std::getline(stringStream, word, delimiter))
{
    wordVector.push_back(word);
}

如何将字符串分成带有多个分隔符的标记?

原文由 Sergei G 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 849
2 个回答

假设其中一个定界符是换行符,以下内容将读取该行并通过定界符进一步拆分它。对于此示例,我选择了分隔符空格、撇号和分号。

 std::stringstream stringStream(inputString);
std::string line;
while(std::getline(stringStream, line))
{
    std::size_t prev = 0, pos;
    while ((pos = line.find_first_of(" ';", prev)) != std::string::npos)
    {
        if (pos > prev)
            wordVector.push_back(line.substr(prev, pos-prev));
        prev = pos+1;
    }
    if (prev < line.length())
        wordVector.push_back(line.substr(prev, std::string::npos));
}

原文由 SoapBox 发布,翻译遵循 CC BY-SA 3.0 许可协议

在这里,很久以后,使用 C++20 的解决方案:

 constexpr std::string_view words{"Hello-_-C++-_-20-_-!"};
constexpr std::string_view delimeters{"-_-"};
for (const std::string_view word : std::views::split(words, delimeters)) {
    std::cout << std::quoted(word) << ' ';
}
// outputs: Hello C++ 20!

必需的标题:

 #include <ranges>
#include <string_view>

参考: https ://en.cppreference.com/w/cpp/ranges/split_view

原文由 BernhardWebstudio 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题