这道C语言题我思路哪里错了?

 我来答
百度网友3cffda32a1
2019-03-02 · TA获得超过2016个赞
知道大有可为答主
回答量:1860
采纳率:83%
帮助的人:1075万
展开全部

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

百度网友af22d4f
2019-03-02
知道答主
回答量:3
采纳率:0%
帮助的人:2212
展开全部

我也是一名新手,这是刚刚编写出来的代码,你可以开阔一下。其实没有必要把a中的字符转换成数。用puts输出就可以了。
#include
#include
int main()
{
int i,j;
char a[7], b[7];//b[]存放a[]中的数字字符。
gets(a);
for(i=0,j=0;a[i];i++)
{
if('0'<=a[i]&&a[i]<='9')
{
b[j]=a[i];
j++;
}

}
b[j]='\0';//结束在b[]后加上\0
puts(b);
return 0;
}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2019-03-02 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

追问
我的那个哪里错了,我顺着思路想应该没错的啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
萌宠奇趣秀
2019-03-02 · 承包你每天24小时的快乐
萌宠奇趣秀
采纳数:163 获赞数:453

向TA提问 私信TA
展开全部

首先解析下你的题目:

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吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式