繁体   English   中英

将输入字符数组转换为 C 中的完整 integer 数字

[英]Convert input char array to full integer number in C

我正在尝试创建一个 function 扫描用户输入并显示计数的 integer 数字并添加它们。 例如,用户输入将是“12 街旁边的 2301 房间”,function 会将数字 2301 计为 1,将 12 计为 2 并将它们相加,2313 是总和并返回它。 所以返回将是 count=2,sum=2313。但是,我对 function 背后的逻辑有疑问。 目前我的 function 分别取数字,例如。 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++;
    }
}

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

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

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

我不包括计数部分。

  • 如果您只需要总和,则不必将其保存为char数组中的 char (在您的代码中名为tmp[] ),但您可以直接将其转换为 integer (假设不会发生溢出)。

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

  • 编辑:我认为 function 应该返回sum 因此,您最好也更改 function 装饰(并添加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;
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM