【问题标题】:Parsing vector<string> into a string将 vector<string> 解析为字符串
【发布时间】:2018-10-23 22:47:17
【问题描述】:

我正在尝试标记一个字符串。我正在处理的字符串具有以下格式:

name,city,major,color,hobbies,age. 

我正在使用下面的代码来执行此操作。 temp 是一个字符串。

    cin>>command;
    vector <string> tokens;
    stringstream check(command);
    string middle;
    while(getline(check, intermediate, ','))
    {
        tokens.push_back(intermidiate);
    }
    for(int i = 0; i<tokens.size(); i++)
    {
        cout << tokens[i] <<endl;

    }
    temp = tokens[1];
    cout<<temp; 

我正在尝试将字符串的向量解析变成一个字符串,但是当我尝试这样做时我的程序崩溃了......

有没有办法将它解析成一个字符串,或者我应该完全尝试其他方法?

【问题讨论】:

  • 您没有显示任何“解析”的代码...

标签: c++ string vector tokenize


【解决方案1】:

您不检查是否访问了向量中的有效元素。所以你很可能会越界。为防止这种情况,请将代码末尾替换为:

cout << tokens.size() << " elements:"<<endl;
if (tokens.size()>1)
    temp = tokens[1];
else temp = "Second element not found";
cout<<temp; 

此外,您读取命令的方式将在第一个空格分隔符处停止读取:

cin>>command;    //entering "hello world" would cause command to be "hello"

为了确保您的字符串不会以这种意想不到的方式缩短,您可以考虑改用getline()

getline (cin,command);

Demo

注意:术语解析具有误导性。我知道您只想提取数组的一个特定值。但是如果你想将几个向量元素连接成一个字符串,你需要做更多的事情。

string tmp; 
for (auto const& x:tokens)
    tmp += x+" ";
cout << tmp<<endl; 

【讨论】:

  • 非常感谢它的工作,我很感激你的解释,现在我明白我做错了什么!
猜你喜欢
  • 2015-11-23
  • 1970-01-01
  • 2014-03-09
  • 2021-04-23
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
相关资源
最近更新 更多