从字符串中提取数字

下面程序将字符串中的连续数字提取出来,并存放到一维数组中。比如说一个字符串:"a284twx234   je3432",把“284“,“234”,“3432”这3个连续数字提取出来,分别存放到a[0],a[1].a[2]中。
#include     < stdio.h >
#include    
< string .h >
#include    
< ctype.h >

int  main()
ExpandedBlockStart.gifContractedBlock.gif
{
    
char str[] = "a284twx234   je3432";
    
int len=strlen(str);
    
char buf[100];
    
int a[3];
    
    
int i = 0;
    
while ( str[i] != '\0' )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
if (isdigit(str[i]))
            buf[i] 
= str[i];
        
else buf[i] = ' ';
        
++i;
    }

    buf[i] 
= '\0';
    
    sscanf (buf,
"%d %d %d"&a[0], &a[1], &a[2]);
    printf (
"%d %d %d\n", a[0], a[1], a[2]);
    
    
return 0;
}



ExpandedBlockStart.gifContractedBlock.gif
/**/ ////
// 实现了把一个字符串中的第一次出现的有效数字
// 提取出来比如:abge_+*123.456dfsdf
// 程序运行的结果应该是:123.456
ExpandedBlockStart.gifContractedBlock.gif
/**/ ///

#include
< iostream >
#include
< cstring >
#include
< cstdio >

#define  MAXLEN 50  // 定义字符数组的上届
using   namespace  std;

int  main()
ExpandedBlockStart.gifContractedBlock.gif
{
    
char numstr[MAXLEN] = "#define MAX_MODE        20 //方式个数";
    
int flag=1,i=0,j=0,h=0;
    
double m=0,sum=0,n=0;
    
//cout<<"输入一个字符串:";
    
//cin>>numstr;

    cout
<<numstr;

    
// 1.剔除+-或者0~9前面的非法字符;
    for(;i<strlen(numstr);i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
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++)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
if( (numstr[i]<='9' && numstr[i]>='0')
            
||numstr[i]=='.')
            h
++;
        
else
            
break;
    }

    h
-=1;

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


    
//4.计算小数部分 
    if(j<&& numstr[h]!='.')
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
for(j++;j<=h;h--)    //让j指向第一个数字字符,从最后一个字符元素往前算
ExpandedSubBlockStart.gifContractedSubBlock.gif
        {                          //小数部分,直到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;
}

// 将string类对象中的数字字符提取出来
int  CFileIndexDialog::string2int(CString str)
ExpandedBlockStart.gifContractedBlock.gif
{
    
int length;
    
int i;
    TCHAR temp2[
15];
    lstrcpy(temp2,str);    
//copies a string to a buffer

    TCHAR temp[
4];
    
int count;
    count
=0;
    length
=strlen(temp2);    //length保存了字符数组temp2的长度
    for(i=0;i<length;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
if ((temp2[i]<='9')&&(temp2[i]>='0')) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            temp[count]
=temp2[i];
            count
++;
        }

    }

    
return (::atoi(temp));
}

转载于:https://www.cnblogs.com/jing8100/archive/2009/11/17/1604705.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值