Posted on 2009-09-08 11:28
天之骄子 阅读(12476)
评论(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<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));
}