检查char数组是否包含数字

时间:2018-12-09 20:04:19

标签: c++

所以我有一个随机的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;
}

有人可以告诉我怎么了吗?

4 个答案:

答案 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;
}    

Live Example