拆分一串单词和数字,并保存一些数字元素c ++

时间:2014-03-11 18:30:05

标签: c++ string

我想找到一种方法来分割由数字(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类型,但我现在仍然坚持这个问题,虽然它可能并不难解决。

由于

1 个答案:

答案 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
}