当前位置: 首页 > 知识库问答 >
问题:

拆分c字符串提升?

丌官翰采
2023-03-14

给定一个字符串,例如“John Doe, USA,男性”,我将如何使用逗号作为分隔符来拆分字符串。目前我使用提升库并设法拆分,但白色行间距会导致问题。

例如,上面的字符串一旦拆分成一个向量,只包含“John”,而不包含其余部分。

更新

这是我目前正在使用的代码

    displayMsg(line);   
    displayMsg(std::string("Enter your  details like so David Smith , USA, Male OR q to cancel"));
    displayMsg(line);

    std::cin >> res;    
    std::vector<std::string> details;
    boost::split(details, res , boost::is_any_of(","));

// If I iterate through the vector there is only one element "John" and not all ?

迭代后,我只得到名字,而不是完整的细节

共有2个答案

万俟均
2023-03-14

更新:由于您正在从cin阅读,当您进入空间时,它自然会停止阅读。它被解读为停止。由于您是在读取字符串,因此更好的处理方法是使用std::getline

#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string.hpp>
#include <iostream>
#include <vector>

using namespace std;
using namespace boost;

int main(int argc, char**argv) {
    std::string res;
    std::getline(cin, res);
    std::vector<std::string> details;
    boost::split(details, res, boost::is_any_of(","));
    // If I iterate through the vector there is only one element "John" and not all ?
    for (std::vector<std::string>::iterator pos = details.begin(); pos != details.end(); ++pos) {
        cout << *pos << endl;
    }

    return 0;
}

输出如下:

John Doe
John Doe
 USA
 Male

尽管您可能想去掉空白。

王骏
2023-03-14

其实不用boost也能做到。

#include <sstream>
#include <string>
#include <vector>
#include <iostream>

int main()
{
    std::string res = "John Doe, USA, Male";
    std::stringstream sStream(res);
    std::vector<std::string> details;
    std::string element;
    while (std::getline(sStream, element, ','))
    {
        details.push_back(element);
    }

    for(std::vector<std::string>::iterator it = details.begin(); it != details.end(); ++it)
    {
        std::cout<<*it<<std::endl;
    }
}
 类似资料:
  • 问题 你想拆分一个字符串。 解决方案 使用 JavaScript 字符串的 split() 方法: "foo bar baz".split " " # => [ 'foo', 'bar', 'baz' ] 讨论 String 的这个 split() 方法是标准的 JavaScript 方法。可以用来基于任何分隔符——包括正则表达式来拆分字符串。这个方法还可以接受第二个参数,用于指定返回的子字符串数

  • 问题内容: 我有一个名为的字符串,其形式像这样 。 我想使用:分隔符。 这样一来,单词将被拆分成自己的字符串,并将成为另一个字符串。 然后我只想使用2种不同的字符串来显示该字符串。 解决这个问题的最佳方法是什么? 问题答案: 你可能要删除第二个字符串的空格: 如果要用特殊字符(例如dot(。))分割字符串,则应在点之前使用转义字符\ 例: 还有其他方法可以做到这一点。例如,你可以使用类(来自):

  • 问题内容: 如何在PHP中使用定界符分割字符串?例如,如果我有字符串,我如何得到? 问题答案: 做这项工作: 您还可以直接将部分结果提取到变量中:

  • 本文向大家介绍C#程序拆分和连接字符串,包括了C#程序拆分和连接字符串的使用技巧和注意事项,需要的朋友参考一下 要在C#中拆分和连接字符串,请使用and方法。让我们说以下是我们的字符串- 为了分割字符串,我们将使用方法- 现在开始联接,使用方法并联接字符串的其余部分。在这里,我们使用方法跳过了字符串的一部分- 示例 您可以尝试在C#中运行以下代码以拆分和连接字符串。 输出结果

  • 问题内容: 使用功能split拆分此String。这是我的代码: 当我尝试这样做时,spli只包含一个字符串。似乎Java在拆分时看不到“ ^”。有人知道如何用字母“ ^”分割此字符串吗? 编辑 解决了:P 问题答案: 这是因为需要一个正则表达式,而不是文字字符串。您必须转义,因为它在regex(字符串开头的锚点)中具有不同的含义。因此,拆分实际上是在第一个字符之前完成的,从而使您完整地返回了完整

  • 问题内容: 我想分裂字符串列,其中值 不等于 到 并保存到另一个表,这将是这样的: 这是我的分割字符串代码: 这是我用来调用该函数的代码: 上面的代码给我这个错误: 问题答案: 子查询返回了1个以上的值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。该语句已终止。 由于您的子查询返回了多行,因此发生了上述错误。尝试执行以下操作: 您会看到它将返回3行,每一项返回一