【发布时间】:2014-03-12 02:42:00
【问题描述】:
我想找到一种方法来拆分由数字 (int) 和单词组成的字符串,并保存其中的一些元素。 例如,我有字符串(保存在变量“row”中: “ 1 120 130 10 亲爱的_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 类型,但我现在被困在这个问题上,尽管它可能并不难解决。
谢谢
【问题讨论】:
-
您是否已经调整了矢量的大小?
v[3]不创建一个元素,它分配给一个已经存在的元素......所以如果它不存在,你将分配给一个任意的内存位置。尝试将v[3]替换为v.at(3)并查看它是否引发异常。我投票结束这个问题,因为您没有提供足够的信息来说明正在发生的事情。 -
你应该试试看strtok;可能会使您的实施更容易
-
@MrDuk,天哪,不!
strtok是可憎的,Boost.Tokenizer 会更好 -
作为一个从事我无法轻松实现第三方库的项目的人,您介意为我详细说明一下吗?怎么样让它成为一个“可憎的”?
-
@MrDuk,它有一个容易出错的接口,它依赖于静态存储,它会破坏它的输入。更不用说它适用于
char*,这使得与std::string一起使用很不方便。