字符串中提取数字的实现(c++)

 


//2008-08-08
//stone
//实现了把一个字符串中的第一次出现的有效数字
//提取出来比如:abge_+*123.456dfsdf
//程序运行的结果应该是:123.456
///
#include<iostream>
#include<cstring>
#include<cstdio>
#define MAXLEN 50 //定义字符数组的上届
using namespace std;
int main()
{
char numstr[MAXLEN];
int flag=1,i=0,j=0,h=0;
double m=0,sum=0,n=0;
cout<<"输入一个字符串:";
cin>>numstr;


// 1.剔除+-或者0~9前面的非法字符;

for(;i<strlen(numstr);i++)
{
    if((numstr[i]<='9'&&numstr[i]>='0')||numstr[i]=='+'||numstr[i]=='-')
   break;
    else
   j++;
}
if(numstr[j]=='-')     //判断负号,为最后的输出做准备
flag=-1;
if(numstr[j]=='+'||numstr[j]=='-')   //让j指向第一个数字元素(剔除+-号)
j++;
i=j;          //让i也指向第一个数字元素

//2.剔除数字元素后面的非法字符;


h=j;
for(;i<strlen(numstr);i++)
{
     if((numstr[i]<='9'&&numstr[i]>='0')||numstr[i]=='.')
          h++;
     else
        break;
}
h-=1;

//3.计算整数 部分

/*
if(numstr[j]=='-')
{
   flag=-1;
   j++;
  
}
if(numstr[j]=='+')
   j++;
*/
for( ;numstr[j]!='.'&&j<=h;j++)     //整数部分计算的实现
{
   n=n*10+numstr[j]-'0';
}


//4.计算小数部分


if(j<h&&numstr[h]!='.')
{
   for(j++;j<=h;h--)    //让j指向第一个数字字符,从最后一个字符元素往前算
    {                          //小数部分,直到h=j时停止。
     m=m*0.1+numstr[h]-'0';
    }
   m*=0.1;

}

//5.合成数字
sum=n+m;
sum=sum*flag;
cout<<"输出转换字符结果:";
cout<<sum<<endl;
printf("printf输出的结果是: %lf",sum);
return 0;

}


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值