C语言如何将一个数字组成的字符串转变成十进制数

#include "stdio.h"
#include "string.h"
void main()
{ char s[10]; int i;
int n=0;
/**************found************/
___(1)___;
/**************found************/
for(i=0;___(2)___;i++)
n=n*10+s[i]-'0';
printf("n=%d\n",n);
}

办法很多,提供三种供参考。

一、直接使用库函数atoi将数字字符串转换成十进制整数。代码如下:

#include "stdio.h"
#include "stdlib.h"//调用库函数atoi要包含这个文件
int main(int argc,char *argv[]){
char a[]="478167831";
printf("%d\n",atoi(a));//直接调用atoi将a转换为十进制整数
return 0;
}

二、用库函数sscanf直接将数组中的数字字符串读入十进制整型变量。代码如下:

#include "stdio.h"
int main(int argc,char *argv[]){
char a[]="478167831";
int x;
sscanf(a,"%d",&x);//调用sscanf,读入时自动转换为int型并由%d控制以十进制赋给变量x
printf("%d\n",x);//输出
return 0;
}

三、自行编写转换代码:

#include "stdio.h"
int main(int argc,char *argv[]){
char a[]="478167831";
int x,i;
for(x=i=0;a[i];(x*=10)+=a[i++]-'0');//字符与数字的关系是"字符值-'0'==同名数字"
printf("%d\n",x);//输出
return 0;
}

上述三代码的输出结果如下图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-07-15

从数字组成的字符串转化为十进制数步骤如下:

1、挨个读取数组,从第0位开始

2、将字符转化为数字。比如从'1'转化为1。可以参考ASCII码表,字符'0'是48,所以只需要将字符减去48即可。

3、将前一个计算出的十进制数(初始化为0)乘以10加上第二步计算出的数字。

4、循环1-3步直到读取完数组内所有内容。

之所以这样算需要举个例子:比如数组内内容是'1','5','9'。计算结果肯定是159。这个159等于1*100+5*10+9*1。我们定义变量S来作为结果(初始化为0)。

按照上述步骤计算:

1、int n='1'-48(=1);

2、s=s*10+n(=1);

3、n='5'-48(=5);

4、s=s*10+n(=15);

5、n='9'-48(=9);

6、s=s*10+n(=159);

你问题里面带有代码,但是留有空白,我根据上述算法和你的代码做了如下答案。

(1)的位置,当然是输入数组

for(int i=0;i<10;i++){
    scanf("%c",&s[i]);
}

(2)的位置就是一个循环条件而已

i<10

但是上述的答案必须输入完完整的十个数字,而且不存在对输入的校验,输入a这样额字符会出现问题。第二个方法就是使用一个结束符号。

(1)的位置

for(int i=0;i<10;i++){    
    scanf("%c",&s[i]);
    if(s[i]<48||s[i]>57)
        break;
}

(2)的位置稍微复杂一点了

i<10&&s[i]<=57&&s[i]>=48

第2个回答  2017-07-22
从数字组成的字符串转化为十进制数步骤如下:
1、挨个读取数组,从第0位开始
2、将字符转化为数字。比如从'1'转化为1。可以参考ASCII码表,字符'0'是48,所以只需要将字符减去48即可。
3、将前一个计算出的十进制数(初始化为0)乘以10加上第二步计算出的数字。
4、循环1-3步直到读取完数组内所有内容。
之所以这样算需要举个例子:比如数组内内容是'1','5','9'。计算结果肯定是159。这个159等于1*100+5*10+9*1。我们定义变量S来作为结果(初始化为0)。

第3个回答  2012-06-21
#include "stdio.h"
#include "string.h"
void main()
{ char s[10]; int i;
int n=0;
/**************found************/
gets(s);
/**************found************/
for(i=0;s[i]!='\0';i++)
n=n*10+s[i]-'0';
printf("n=%d\n",n);
}
相似回答