所以我有一个随机的char数组,即“ asdd1vnb24vnf63vbn,-5h-2kk”,我应该检查它是否包含数字,如果包含数字,我的任务是给它们添加相反的符号(S = -1- 2-4-6-3 + 5 + 2)不使用字符串函数。 但是现在,我被困在这里,根本无法理解为什么它不起作用,尽管它能够打印数组中的数字,但“和”给出了随机数。
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;
}
有人可以告诉我怎么了吗?
答案 0 :(得分:3)
您将ASCII值添加到求和变量而不是整数值
在sum += s[i]
至sum += s[i] - '0'
答案 1 :(得分:1)
您不应添加s[i]
,而应添加s[i] - '0'
。
为什么?
s[i]
是一个字符代码,“零”可以是48,然后“ 49”代表“一”,50是“二”,依此类推。因此,您可以增加ascii代码值而不是char值s[i]
减为0后,您会收到准确的数字值(如果确实是一个数字,因为我们看不到您的isdigit
实现)答案 2 :(得分:1)
除了显而易见的sum += s[i] - '0'
之外,我还遇到另一个问题-主题入门者不会使用反数字符号。因此,您需要检查前面的'-'键:
if (isdigit(s[i])) {
if (i > 0 && s[i - 1] == '-')
sum += s[i] - '0';
else
sum -= s[i] - '0';
答案 3 :(得分:1)
我的任务是添加相反的符号
如果是这种情况,除了其他答案中给出的建议外,您还需要跟踪符号的极性,无论它是负极还是正极。
#include <iostream>
#include <cctype>
int main()
{
char ptr[] = "asdd1vnb24vnf63vbn,-5h-2kk";
int multiplier = 1; // this starts out at 1
char *p = ptr;
int value = 0;
while ( *p ) // keep going until the end of the string
{
if (isdigit(*p))
{
value += multiplier * (*p - '0');
multiplier *= -1; // switch polarity
}
++p;
}
std::cout << value;
}