将向量解析<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;
此外,读取命令的方式将在第一个空格分隔符处停止读取:
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;
相关文章:
- 迭代和比较映射<字符串、矢量<string>> c++ 中的值
- 将向量解析<string>为字符串
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- 两个数组,int 和 string,如何显示带有对应 int 的字符串?
- 将图形表示为unordered_map<字符串、向量>时拓扑排序错误<string>
- 将 std::string( "x3BxDEx7C" ) 转换为可读的十六进制字符串?
- 为什么 string::begin() 在即时窗口中输出整个字符串
- 比较 std::string 和 C 样式字符串文字
- 从 C 字符串构造 std::string 与从另一个 std::string 构造 std::string 不一致
- 将 c 字符串直接写入 std::string
- std::hash<std::string> 可以为不同的字符串返回相同的值吗?
- 反转没有循环的字符串,C++中只有 std::string 成员
- 为什么我不必从 std::string 的函数中释放字符串c_str?
- 如何将矢量元素复制到<string>字符串中?
- 为什么<string>字符串对象需要 #include 而不是字符串文本?
- 在哪里使用 c++(即 std::string) 字符串以及在哪里使用'