所以我有一个随机字符数组,即"asdd1vnb24vnf63vbn,-5h-2kk",我应检查它是否包含数字,如果有,我的任务是添加相反的符号(S = -1-2-4-6-3 5 2) without using string functions . 但是现在我'm stuck here and simply cannot understand why it doesn'工作和"Sum"给出随机数,虽然它能够打印数组中的数字 .
int main ()
{
char s [] = "asdd1vnb24vnf63vbn,-5h-2kk";
int sum = 0;
for (int i = 0; i < sizeof(s)/sizeof(s[0]); i++) {
if (isdigit(s[i]) !=0) {
sum += s[i];
cout << "Sum is " << sum << endl;
}
}
system ("pause");
return 0;
}
有人能告诉我什么是错的吗?
4 回答
你将ASCII值添加到sum变量而不是整数值只需要在
sum += s[i]
到sum += s[i] - '0'
的代码中进行少量修正如果是这种情况,除了其他答案中给出的建议外,您还需要跟踪标志的极性,无论是负面还是正面 .
Live Example
除了显而易见的
sum += s[i] - '0'
我看到另一个问题 - 主题启动器不会反向数字符号 . 所以你需要检查前面的'-'键:你不应该添加
s[i]
,而应该是s[i] - '0'
. 为什么?s[i]
是一个字符代码,对于'zero'它可能是48,然后49表示'one',50表示'two',依此类推 . 因此,您增加ascii代码值而不是char值一旦用'0' char递减
s[i]
,就会收到确切的数字值(如果它确实是一个数字,因为我们没有看到你的isdigit
实现)