首页 文章

检查char数组是否包含数字

提问于
浏览
-2

所以我有一个随机字符数组,即"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 回答

  • 1

    你将ASCII值添加到sum变量而不是整数值只需要在 sum += s[i]sum += s[i] - '0' 的代码中进行少量修正

  • 3

    我的任务是用相反的符号添加它们

    如果是这种情况,除了其他答案中给出的建议外,您还需要跟踪标志的极性,无论是负面还是正面 .

    #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

  • 1

    除了显而易见的 sum += s[i] - '0' 我看到另一个问题 - 主题启动器不会反向数字符号 . 所以你需要检查前面的'-'键:

    if (isdigit(s[i])) {
         if (i > 0 && s[i - 1] == '-')
            sum += s[i] - '0';
         else
            sum -= s[i] - '0';
    
  • 1

    你不应该添加 s[i] ,而应该是 s[i] - '0' . 为什么?

    • s[i] 是一个字符代码,对于'zero'它可能是48,然后49表示'one',50表示'two',依此类推 . 因此,您增加ascii代码值而不是char值

    • 一旦用'0' char递减 s[i] ,就会收到确切的数字值(如果它确实是一个数字,因为我们没有看到你的 isdigit 实现)

相关问题