我想找到一种方法来分割由数字(int)和单词组成的字符串,并保存一些元素。 我有,例如字符串(保存在变量“row”中: “1 120 130 10 Dear_167 5” 我想在矢量v中保存120 130 10和5 .. 我写了一个代码,如:
int elements;
istringstream line_stream(row);
line_stream>>elements>>elements; //to skip the first number of row, 1
v[0]=elements; //so I save 120 in v[0]
line_stream>>elements;
v[1]=elements; //so I save 130 in v[1]
line_stream>>elements;
v[2]=elements; //so I save 10 in v[2]
line_stream>>elements>>elements;
v[3]=elements; //to save 5 in v[3]
我的问题是在v [3]中我发现0 .. 我认为这是因为我的变量元素是一个int类型,但我现在仍然坚持这个问题,虽然它可能并不难解决。
由于
答案 0 :(得分:1)
line_stream>>elements;
v[1]=elements; //so I save 130 in v[1]
更简单的方法是:
line_stream >> v[1];
然而,假设v[1]
处的元素已经存在,如果没有,则需要先调整向量的大小。
line_stream>>elements>>elements;
如果流中的单词为Dear_1675
,则无效,因为无法将其读入int
,因此流将处于失败状态,您将无法从中读取其他任何内容。忽略读入string
的任意(非整数)单词。
这应该做你想要的:
std::string ignore;
std::istringstream line_stream(row);
v.resize(4);
line_stream >> ignore >> v[0] >> v[1] >> v[2] >> ignore >> v[3];
您还应该检查错误(如果您已经在自己的代码中发现了流失败了):
std::string ignore;
std::istringstream line_stream(row);
v.resize(4);
if (line_stream >> ignore >> v[0] >> v[1] >> v[2] >> ignore >> v[3])
{
// read everything OK
}
else
{
// row could not be read, did not match expected format
}