字符串中的数字总和(使用字符串对象)C ++

时间:2014-12-11 09:50:40

标签: c++ string object sum c-strings

我目前正在尝试使用用户输入的数字字符串,将它们单独转换为int,并总计它们的总和。

EX:如果用户输入" 1234",程序应该执行1 + 2 + 3 + 4并显示" 10"。我已经尝试了很多但似乎还在停滞不前。

我希望使用C-string / String对象创建此代码,并使用" istringstream()"如果可能的话(虽然没有必要...... [特别是如果有更简单的方法......])

这是我到目前为止所做的:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    string digits;
    int total = 0, num;

    cout << "Enter a string of digits, and something magical will happen to them..." << endl;
    cin >> digits;

    for (int i = 0; i < digits.length(); i++)
    {   
        cout << digits.at(i) << endl;
        istringstream(digits.at(i)) >> num;
        cout << num << endl;    // Displays what came out of function
        total += num;
    }

    cout << "Total: " << total << endl;

    // Digitize me cap'm
    // Add string of digits together
    // Display Sum
    // Display high/low int in string
}

我做错了什么?为什么我一直在for循环中获得超高数字?我应该使用更高效的功能吗?谢谢你的帮助:))

3 个答案:

答案 0 :(得分:1)

应该是

for (int i = 0; i < digits.length(); i++)
{   
    cout << digits.at(i) << endl;
    num = digits.at(i) - '0';
    assert(0 <= num && num <= 9);
    cout << num << endl;    // Displays what came out of function
    total += num;
}

要转换单个数字,您不需要像stringstream这样的复杂内容。 您也可以使用(不推荐)istringstream(digits.substr(i, 1))

答案 1 :(得分:0)

而不是istringstream(digits.at(i))&gt;&gt; num,尝试使用这种转换方式:

num = ((int)digits.at(i))-((int) ('0'));

您将拥有更快的代码。

答案 2 :(得分:0)

我会创建一个新函数来获取任何数字的数字总和:

long long digitSum(long long number)
{
    long long sum = 0;
    while (number != 0)
    {
        sum += number % 10;
        number /= 10;
    }
    return sum;
}

然后你可以在你的main()中做到:

int main()
{
    string digits;

    cout << "Enter a string of digits, and something magical will happen to them..." << endl;
    cin >> digits;

    auto enteredNumber = std::stoll(digits);
    auto total = digitSum(enteredNumber);

    cout << "Total: " << total << endl;
}

函数std::stollstd::string转换为long long

但这将限制用户可以输入的号码。因此,与已经说过的其他答案一样,另一种方法是使用字符的属性(它们只是一个数字)。

字符'0'的值为48。 char [{1}}的值为'1'。因此,当您执行49时,您会得到结果'1' - '0',这正是char表示中数字的数字值。

这意味着您可以执行以下操作:

1

这将使你的主要看起来像这样:

long long digitSum(string numberStr)
{
    long long sum = 0;
    for (int i = 0; i < numberStr.length(); i++)
    { 
        auto charValue = numberStr.at(i) - '0';
        sum += charValue;
    }
    return sum;
}