【问题标题】:Convert input char array to full integer number in C将输入char数组转换为C中的完整整数
【发布时间】:2020-07-14 23:59:03
【问题描述】:

我正在尝试创建一个函数来扫描用户输入并显示计数的整数并将它们相加。例如,用户输入将是“12 街旁边的 2301 房间”,该函数会将数字 2301 计为 1,将 12 计为 2 并将它们相加,2313 是总和并返回它。所以返回将是 count=2, sum= 2313。但是,我对函数背后的逻辑有疑问。目前我的函数分别采用数字,例如。 2302 = 2,3,0,2。

这是我的代码:

void num_count(char array[]) {
    int i = 0;
    int count = 0;
    int sum = 0;
    int tmp[20];
    tmp_size = 20;

    while (array[i] != '\0') {
        if (array[i] >= '0' && array[i] <= '9') {
            tmp[i] = (array[i] - '0'); 

            //not sure what to do here

            count++;
            sum += (array[i] - '0');
        }

        i++;
    }
}

目前我尝试将其放入临时数组中,但不确定下一步该做什么。任何帮助将不胜感激。

【问题讨论】:

  • 1.每个数字都是 10 的幂。相应地调整你的数学。
  • 2.您可能应该使用isdigit(),而不是array[i] &gt;= '0' &amp;&amp; array[i] &lt;= '9'
  • @RobertHarvey:我不是 100% 确定,但我怀疑 isdigit 函数只不过是一个 if 块,例如:int isdigit(char c) { if (c &gt;= '0' &amp;&amp; c &lt;= '9') return 1; else return 0; }

标签: arrays c char


【解决方案1】:

我认为你应该从数组的末尾开始。 当你遇到一个数字时,你必须对第一个数字求和,然后迭代下一个字符,如果它是一个数字,你必须对 digit x10 求和,下一个:digit x100 ... 当下一个字符不是数字时,重置乘数和计数++。

   if(isDigit){
    sum+= digit*multiplier;
    multiplier*=10;
    }
    else {
    multiplier=1;
    }

我不包括计数部分。

【讨论】:

    【解决方案2】:

    使用以下代码sn-p提取字符串的单个单词,检查提取的单词是否为数字,如果是数字,计算总和并增加计数。

    int i;
    int j;
    int count;
    int sum;
    char *chars;
    char *pChar;
    int len;
    int isNum;
    for (i=0, count=0, sum=0; i<strlen(array);) {
       pChar = strchr(array[i], ' ');
       len = pChar - array[i];
       chars = malloc(sizeof(char) * (len + 1));
       strncpy(chars, array[i], len);
       chars[len] = '\0';
       for (j =0, isNum = 1; j<len; j++) {
          if (!isdigit(chars[j])) {
             isNum=0;
             break;
          }
       }
       if (isNum) {
         count++;
         sum += atoi(chars);
       }
       free(chars);
       if (strchr(array[pChar - array + 1] != NULL)
          i = (pChar - array) + 1;
       else
          break;
    }
    

    【讨论】:

      【解决方案3】:
      • 如果只需要求和,则不必将其保存为char 的字符数组(在您的代码中命名为tmp[]),但可以直接将其转换为整数(假设不​​会溢出)发生)。

      • 每次检测到第一个数字字符时,应将 tmp 重置为零并继续乘以 10,然后再添加下一个数字值,直到检测到非数字字符。

      • 编辑:我认为该函数应该返回sum。因此,您最好也更改函数装饰(并添加return sum 行)。

      int num_count(char array[]) {
          int i = 0;
          int sum = 0;
          int tmp;
      
          while (array[i] != '\0') {
              if (array[i] >= '0' && array[i] <= '9') {
                  tmp = 0;
      
                  while (array[i] >= '0' && array[i] <= '9') {
                      tmp = tmp * 10 + array[i] - '0';
                      i++;
                  }
      
                  sum += tmp;
              }
              else {
                  i++;
              }
          }
      
          return sum;
      }
      

      【讨论】:

        猜你喜欢
        • 2016-02-27
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        • 2017-10-08
        • 2016-04-30
        相关资源
        最近更新 更多