[英]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.