使用字符串流读取整数并将它们相加
Using stringstream to read integers and add them up
我正在尝试使用字符串流使用字符串流输出标准输入的每一行中的整数总和。这就是我到目前为止所拥有的
void sumvec(vector<int> v) {
int total = 0;
for (int i = 0; i < v.size(); i++) {
total += v[i];
}
cout << total << endl;
}
int main()
{
std::vector<int> v;
std::string line;
std::stringstream sstream(line);
int i;
while (getline(std::cin, line)){
while (sstream >> i) {
v.push_back(i);
}
sumvec(v);
}
}
我希望每行都有自己的总和。但是当我这样做时,没有任何内容被返回到输出。任何帮助将不胜感激。
当您在第二个while
中使用它时sstream
为空:while (sstream >> i)
。那是因为您使用空std::string line;
初始化了它。您可以在第一个 while 循环中移动它:
while (getline(std::cin, line)){
std::stringstream sstream(line);
这将修复您的代码。
改进代码的一些建议:
此外,请始终初始化变量,因此int i
应int i = 0;
或int i{};
。
似乎您只是从 stdin 读取到line
,然后将其转换为int
.您可以使用std::stoi()
代替stringstream
,在这种情况下可能就足够了。
sumvec
包含一个原始循环,用于添加vector
的所有元素。您可以改用std::accumulate
来执行此操作。例:
int total = std::accumulate(v.begin(), v.end(), 0);
cout << total << endl;
如果您仍想使用sumvec
,请确保通过引用传递向量。这将避免复制,从而提高性能,并且您将保证v
不会更改此功能。它还使读者清楚地知道这个函数的作用。
void sumvec(const vector<int>& v) {
此外,在您的循环中
for (int i = 0; i < v.size(); i++)
您正在将size_t
与int
进行比较.size_t
是unsigned
,而int
则不是。尽可能避免这种情况。请改用size_t
:
for (size_t i = 0; i < v.size(); i++)
相关文章:
- C 字符串返回字符串的整数/双精度/长整型值
- 尝试将字符串/字符转换为整数会产生意外结果
- 从字符串中提取整数并形成一个数组
- 如何将整数字符串转换为整数的二维向量?
- 如何初始化整数+字符串数组
- 将字节数组转换为逗号分隔的整数字符串
- 编写 LLVM 整数/字符串输入
- 使用户输入整数字符串,然后输出不同的字符串
- 如何在 python 中将无符号字符类型的整数字符串转换为整数
- 将整数字符串转换为整数的最简单方法
- 如何检查输入是否为整数/字符串
- 如何将二进制字符串转换为整数字符串
- 将二进制字符串转换为整数字符串c++
- 如何在c++中将一个整数字符串转换为数组
- 整数字符串压缩算法
- 当 0 是行中的最后一个整数时,如何使用 c++ 检测您已经到达整数字符串的末尾?
- 将整数字符串解析为 std 向量
- 用空格分割一个正/负整数字符串
- 我如何在c++中排序一个整数字符串
- 添加整数字符串