C++ 拆分一串单词和数字,并保存其中的一些数字元素c++;

C++ 拆分一串单词和数字,并保存其中的一些数字元素c++;,c++,string,C++,String,我想找到一种方法来拆分由数字(int)和单词(按空格)组成的字符串,并保存其中的一些元素。 例如,我得到了字符串(保存在变量“row”中): “1 120 130 10亲爱的_167 5” 我想把120,130,10和5。,保存在向量v中。 我编写的代码如下: int elements; istringstream line_stream(row); line_stream>>elements>>elements; //to skip the first number

我想找到一种方法来拆分由数字(int)和单词(按空格)组成的字符串,并保存其中的一些元素。 例如,我得到了字符串(保存在变量“row”中): “1 120 130 10亲爱的_167 5” 我想把120,130,10和5。,保存在向量v中。 我编写的代码如下:

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类型的,但是我现在被这个问题困住了,尽管它可能不难解决

谢谢

更简单的方法是:

line_stream >> v[1];
但是,假设
v[1]
处的元素已经存在,如果不存在,则需要首先调整向量的大小

line_stream>>elements>>elements;
如果流中的某个单词是
亲爱的_1675
,这将不起作用,因为该单词无法读入
int
,因此流将处于失败状态,您将无法从中读取任何其他内容。忽略读入
字符串的任意(非整数)单词

这应该满足您的要求:

std::string ignore;
std::istringstream line_stream(row);
v.resize(4);    
line_stream >> ignore >> v[0] >> v[1] >> v[2] >> ignore >> v[3];
您还应该检查错误(如果您这样做了,您会发现流在您自己的代码中失败):


您是否已经调整了向量的大小?
v[3]
不会创建元素,它会分配给一个已经存在的元素…因此,如果它还不存在,您将分配给任意内存位置。请尝试将
v[3]
替换为
v.at(3)
并查看它是否引发异常。我投票结束这个问题,因为您没有提供足够的信息来说明发生了什么。您应该尝试研究一下;这可能会使您的实现变得非常困难easier@MrDuk,天哪,不!
strtok
是个讨厌的东西,如果有人在做一个我不容易的项目,那他会更好如果要实施第三方LIB,您介意为我详细说明一下吗?这会让它成为一个“讨厌的东西”吗?@MrDuk,它有一个容易出错的界面,它依赖于静态存储,并且会破坏它的输入。更不用说它在
char*
上工作,这使得使用
std::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
}