将向量解析<string>为字符串

Parsing vector<string> into a string

本文关键字:string 字符串 gt lt 向量      更新时间:2023-10-16

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

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; 

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

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

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

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);

演示

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

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