如何使用 stringstreams 求字符串中整数的总和?

How to use stringstreams to find the sum of integers inside a string?

我有一个包含 6 个整数的字符串 '''string myStr = "1 2 3 4 5 6"'''

我想使用字符串流来单独读取所有这些数字,然后将它们全部加起来求和。

这是作业问题的一部分,只是为了澄清,我需要使用 stringstreams 作为读取字符串并将其中所有数字相加的方法。

提示如下:

"Create a string with a series of six numbers. With the help of a stringstream, add all numbers in the string"

注意: 抱歉,如果这是一个结构错误的问题。对我如何使这一点更清楚的任何批评表示赞赏。

我一直在寻找一种方法来执行此操作,但我无法准确理解其工作原理。

我知道您需要使用“'ostringstream'”或“'istringstream'”来完成我想做的任何事情。但是我不知道怎么用。

我有一本教科书 "Murach's C++ Programming",这是我们在 class 中供参考的书。但是除了从文本文件中读取之外,它没有涉及任何其他上下文中的字符串流。

void stringstreams(string myStr = "1 2 3 4 5 6"){

    stringstream strStream;
    strStream << myStr;

    myStr = strStream.str();
    cout << myStr << endl;

}

描述结果:

我认为所有这一切都是将字符串发送到字符串流中,然后以另一种方式将其发送回去(我可能完全错了)。我不确定该怎么做,因为我没有任何使用 stringstream 的经验。

看看这个简单的注释代码是否有帮助:

int main() {
    std::string myStr = "1 2 3 4 5 6";
    std::stringstream ss{ myStr}; // Initialize the stringstream; use stringstream instead if you are confused with ostringstream vs istringstream
    string str;
    int sum = 0;
    while (getline(ss, str, ' ')) {  // split stringstream into tokens separated by a whitespace
        sum += std::atoi(str.c_str()); // convert each string to c- equivalent before converting to integer using atoi
    }
    std::cout << sum << endl;
}

这是使用 std::stringstream 的另一种方法,无需手动将字符串转换为整数:

#include <sstream>
#include <string>
#include <iostream>

int main() 
{
    std::string myStr = "1 2 3 4 5 6";
    std::stringstream strm(myStr);
    int value;
    int sum = 0;
    while (strm >> value)
        sum += value;
    std::cout << sum << "\n";
}