这道C语言题我思路哪里错了?
4个回答
展开全部
①a[i]的类型是char,你的a[i]在乘d前,应该先进行a[i]-48的操作。(0的ASCII值是48)
②输入的字符串不一定只有4个数字,所以另d=1000是不妥当的。
③d的赋值在for循环内部,这样会导致每次检测出一个数字,d的初始值都为1000。
以下是最优代码:
#include<stdio.h>
#include<string.h>
int main(){
char a[6];
int f=0;
gets(a);
for(int i=0;i<strlen(a);i++)
if('0'<=a[i]&&a[i]<='9')
f=f*10+a[i]-48;
printf("%d",f);
}
如果要按照你的思路进行修改的话,应该要先统计一下数字的个数,然后确定d的值,然后把对d的赋值放在for循环的外面即可。具体如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(){
char a[6];
int f=0,count=0,d,c=0;
gets(a);
for(int i=0;i<strlen(a);i++)
if('0'<=a[i]&&a[i]<='9')
count++;
d=pow(10,count-1);
for(int i=0;i<strlen(a);i++)
if('0'<=a[i]&&a[i]<='9'){
c=(a[i]-48)*d;
d/=10;
f+=c;
}
printf("%d",f);
}
展开全部
首先解析下你的题目:
1、取出字符串中的数字字符。
2、将数字字符组装成整形数, 并打印出来。
3、整形数采用的是十进制, 而且只有0-9中的10个数字。
代码如下:
int main()
{
char a[60];
int i, f =0;
cin >> a;
for(i=0; i<strlen(a); i++)
{
if(('0'<=a[i]) && (a[i]<='9'))
{
f = f * 10 + (a[i] - '0');
}
}
cout << f << endl;
return 0;
}
结果输出:
注意实现/建议:建议了解下ASCII中的'0' - '9'与数字中的 0-9之间的联系。
如果以上对你有帮助, 请采纳一下, 谢谢。
追问
长度不超过6你为什么定义的是a[60],还有0什么意思?必须减去0吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询