从字符串中提取数字

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

int  main()
{
    char str[] = "a284twx234   je3432";
    int len=strlen(str);
    char buf[100];
    int a[3];
    
    int i = 0;
    while ( str[i] != '\0' )
    {
        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;
}



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

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

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

int  main()
{
    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++)
    {
        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.计算整数 部分
    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;
}

// 将string类对象中的数字字符提取出来
int CFileIndexDialog::string2int(CString str)
{
    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++)
    {
        if ((temp2[i]<='9')&&(temp2[i]>='0')) 
        {
            temp[count]=temp2[i];
            count++;
        }

    }

    return (::atoi(temp));
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值