| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1701 人关注过本帖
标题:再请大家帮忙优化个程序,将只含数字和小数点字符串转化为实型数!!
只看楼主 加入收藏
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
结帖率:100%
收藏
已结贴  问题点数:16 回复次数:4 
再请大家帮忙优化个程序,将只含数字和小数点字符串转化为实型数!!
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    char s[30];
    int i,j=0,k,a,b,c,e=0,f=0,g;
    double sum=0;
    k=1;
    scanf("%s",s);
    for(i=0;s[i]!='\0'&&s[i]!='.'&&s[i]!='-';i++);//求整数位
      if(s[0]=='-') return 0;
        if(s[i]=='.')
        {
            for(j=i+1;s[j]!='\0';j++)//求小数位
            {
              sum=sum+(s[j]-48)*pow(1.0/10,k);//求出小数位部分,将ascii的(0~9)转换int的(0~9)
                 k++;
            }
        }
    g=0;
    a=i-1;
    for(;a>=0;a--)
    {
        sum=sum+(s[a]-48)*pow(10,g);//求整数部
        g++;
    }
    for(b=0;b<i;b++)
    {
         if(s[b]!='0')break;
        e++;
               
    }
    f=i+1;           
    if(e==i)
    {
        if(j!=0)
        {
           for(c=i+1;c<j;c++)
           {
           if(s[c]!='0')break;
           f++;
           }
              if(f==j) return 0;//如果小数整数部都为0结束循环
                  else
                  {
            printf("%s\n",s);
              printf("%f",sum);
                  }
        }
         else return 0;//如果只输入整数部分且为0结束循环
    }
    else
    {
     printf("%s\n",s);
      printf("%f",sum);
    }
return 0;
}
昨天看了一个帖子浮点数如何可以比较大小且原样输出,所以就马马虎虎编了这个将只含数字和小数点字符串转化为其他变量程序,但是好像超麻烦所以再来请教一下大大们改一下!!!
搜索更多相关主题的帖子: 优化 小数点 字符串 color 
2012-03-23 10:51
nicum
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:180
专家分:712
注 册:2011-2-1
收藏
得分:6 
c语言有将字符串转换成数字的函数 atoi;你可以上网查查
C++还有个stringstream类 可以实现,很方便
2012-03-23 11:02
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:2 
建议你自己多考虑考虑,并且,对照标准的strtod,做一个case比较。
在构架上,用状态机能达到事半功倍的效果,最好先画状态图,清楚后再编码。
2012-03-23 12:37
moonnight
Rank: 5Rank: 5
等 级:职业侠客
帖 子:158
专家分:380
注 册:2012-3-17
收藏
得分:8 
根据你的程序简化的!
程序代码:
#include<stdio.h>

 int main()

 {
     char s[30];
     int i,sumi=0;
     double k,sumf=0.0;
     scanf("%s",s);
     for(i=0;s[i]!='\0'&&s[i]!='.'&&s[i]!='-';i++)
         sumi=sumi*10+s[i]-'0';//求整数部分
     if(s[0]=='-')
         return 0;
     if(s[i]=='.')
         for(i++,k=0.1;s[i]!='\0';i++,k=k/10)//求小数部分
             sumf=sumf+(s[i]-'0')*k;
     sumf=sumi+sumf;
     printf("字符串是:%s\n",s);
     printf("实数是:%f",sumf);
     return 0;

 }

2012-03-23 16:14
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
收藏
得分:0 
回复 3楼 silent_world
对照标准的strtod
这些都没有听说过呀!可能现在学习的知识还不够吧!!

Stay hungry , Stay foolish!
2012-03-23 19:48
快速回复:再请大家帮忙优化个程序,将只含数字和小数点字符串转化为实型数!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017944 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved