首页 > 解决方案 > 如何在 C++ 中从字符串中提取数据

问题描述

注意:我正在使用 C++11 标准

我正在寻找一个处理以下问题的函数:

给定以下输入:a,b,c我希望它打印abc

给定:a,b,c,我希望它打印aand band cand""

给定:,a我希望它打印""a

鉴于,它应该打印""并且在空字符串的情况下它不应该打印任何东西

换句话说,我想提取两个,加之间的每个值来处理边缘。


我当前的实现是如此的错误,我已经编辑了超过 8 次,因为我总是发现一些边缘情况。

void print(const string &command)
{
        string vertex_title = "";
        int i = 0;
        while (i < command.lengh()) {
        if (command[i] == ',') {
            if (i==command.lengh()-1) return false;
            std::cout<<vertex_title;
            vertex_title = "";
            i++;
            continue;
        }
        vertex_title += command[i++];
}

注意:我不知道,但也许正则表达式在这里有帮助(我对此一无所知)

标签: c++stringalgorithm

解决方案


虽然您可以实现这样的功能,但我强烈建议您使用现有的解决方案。有不少。

我个人习惯absl::StrSplit()(见https://abseil.io/docs/cpp/guides/strings)默认情况下会做你想做的事。

Thomas Sablik 还在评论中写道:

您可以使用 boost::algorithm::split 或 std::strtok


推荐阅读