笑看风云淡

宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒
posts - 96, comments - 48, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 ::  :: 聚合  :: 管理

从字符串中提取数字

Posted on 2009-09-08 11:28 天之骄子 阅读(12382) 评论(1)  编辑 收藏 引用
下面程序将字符串中的连续数字提取出来,并存放到一维数组中。比如说一个字符串:"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<&& 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));
}

Feedback

# re: 从字符串中提取数字  回复  更多评论   

2014-04-28 23:15 by 30256323036632
';.[';;;';louhikjkik55445215824154545565

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理