将 vector<string> 解析为字符串
Parsing vector<string> into a string
我正在尝试标记字符串。我正在处理的字符串具有以下格式:
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;
此外,您读取命令的方式将在第一个 space 分隔符处停止读取:
cin>>command; //entering "hello world" would cause command to be "hello"
为了确保您的字符串不会以这种意想不到的方式被缩短,您可以考虑改用 getline()
:
getline (cin,command);
注意: 术语 parse 具有误导性。我了解到您只想提取数组的一个特定值。但是如果你想将几个向量元素连接成一个字符串,你需要做更多的事情。
string tmp;
for (auto const& x:tokens)
tmp += x+" ";
cout << tmp<<endl;
我正在尝试标记字符串。我正在处理的字符串具有以下格式:
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;
此外,您读取命令的方式将在第一个 space 分隔符处停止读取:
cin>>command; //entering "hello world" would cause command to be "hello"
为了确保您的字符串不会以这种意想不到的方式被缩短,您可以考虑改用 getline()
:
getline (cin,command);
注意: 术语 parse 具有误导性。我了解到您只想提取数组的一个特定值。但是如果你想将几个向量元素连接成一个字符串,你需要做更多的事情。
string tmp;
for (auto const& x:tokens)
tmp += x+" ";
cout << tmp<<endl;