【发布时间】:2015-03-28 23:22:19
【问题描述】:
我有一个类似的字符串:
string line="6,148,72,35,0,33.6,0.627,50,1";
我想将其中的数字复制到 std::vector 的各个元素中。 我想使用 std::vector.assign() 或 std::copy()。
所以我写了:
string line="6,148,72,35,0,33.6,0.627,50,1";
vector<double> row;
istringstream iss { line };
row.assign(istream_iterator<double>(iss), istream_iterator<double>());
但结果是 assign() 只将字符串中的第一个数字复制到向量中,即我得到了
row={6}
虽然我想得到
row={6,148,72,35,0,33.6,0.627,50,1}
如果我改用 std::copy 也是一样,比如:
string line="6,148,72,35,0,33.6,0.627,50,1";
vector<double> row;
istringstream iss { line };
copy(istream_iterator<double>(iss), istream_iterator<double>(), back_inserter(row));
读取第一个数字后,字符串中的复制似乎结束了,我不知道为什么。知道如何使用 assign() 或 copy() 将字符串中的每个数字复制到向量中吗?
【问题讨论】:
-
std::replace(line.begin(), line.end(), ',', ' ');在定义iss之前,如 here -
@PiotrS。就在现场。现在我想知道,有没有办法避免更换?类似于将分隔符定义为
,? -
@AdriC.S.是的!但是,在您的情况下,我认为替换更可取:stackoverflow.com/a/28197337/2642059
-
@JonathanMee 我明白了!感谢您的链接!
-
@AdriC.S.是的,如果设置
istreams 以读取 CSV 是您必须做的很多事情,您可以创建一个const ctype<char>::mask并在任何地方使用它。但如果只是这个地方,我会支持replace,因为老实说,没有人会使用ctype<char>::mask,所以它会让你的代码难以理解。
标签: c++ c++11 vector stl stringstream