无法在C++中将整数字符串转换为整数
问题描述:
我目前手边的一个类中有User :: User(string id,string ratings)。 我正在尝试将当前存储的字符串“1 5 5 3 0 -5 0 5”(这是评级的参数,已经处理了id)转换成一个无法更改的向量,称为向量(int)< - 整数评分作为在字符串中看到的8个整数的向量。遍历这个字符串并存储单个值(包括底片)的最佳方法是什么?无法在C++中将整数字符串转换为整数
答
#include <sstream>
#include <vector>
#include <iostream>
int main()
{
std::istringstream is("1 5 5 3 0 -5 0 5");
std::vector<int> v;
int n;
while (is >> n)
v.push_back(n);
for (size_t i = 0; i < v.size(); i++)
std::cout << v[i] << '\n';
return 0;
}
答
这个问题是一个典型的用例为stream iterators
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>
int main()
{
std::istringstream iss{ "1 5 5 3 0 -5 -5" };
std::vector<int> v;
std::copy(std::istream_iterator<int>{ iss },
std::istream_iterator<int>{},
std::back_inserter(v));
std::copy(std::begin(v),
std::end(v),
std::ostream_iterator<int>(std::cout, " "));
}
退房'的std :: stringstream'。 – molbdnilo 2014-11-21 10:49:11
定义“最佳”...容易推断正确性?扩展的错误处理?快速? – 2014-11-21 10:49:23
最有意义的是,它将最有效地将来自该流的int向量中的8个不同值(在这种情况下)放置(并且还将识别空间不应被转换为整数),并且否定将导致向量中的索引为字符串中下一个索引的负版本。 – 2014-11-21 10:53:26