我目前正在尝试使用用户输入的数字字符串,将它们单独转换为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循环中获得超高数字?我应该使用更高效的功能吗?谢谢你的帮助:))
答案 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::stoll将std::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;
}