作者在 2010-08-08 11:07:01 发布以下内容
// 目的:从字符串中提取数值( 包括浮点格式数据)
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <malloc.h>
// 如果是小数点则必须保证这个位置的前面和后面中有有一个数字
// 如果是负号则要求
// 数据格式的限制(简化操作)
// 必须保证是符号开始的或者数字开始的制,如果是负号,则后面一定是数字
// 一直查询到非数字和小数点才结束
int process(char *str,double *data)
{
int row = 0 ;
for(int i=0;*(str+i)!='\0';i++)
{
int digitFlag = 0 ;
// 确定首偏移地址
if( isdigit(*(str+i)) || (isdigit(*(str+i+1))&&(*(str+i)=='-')) )
{
int j=1;
char pointfrag = 2; // 一个数字中小数点不能为2
i++;
digitFlag=1; // 表明是数字开端
while( (digitFlag==1)&&(pointfrag>0) )
{
if( isdigit(*(str+i)) )//(*(p+i)>=48&&*(p+i)<=57)
{
i++; // 字符串位置偏移
j++; // 有数数字个数计数值+1
}
else
{
if( *(str+i)=='.' ) // 是小数点
{
pointfrag--;
i++; j++;
}
else // 不是数字 也不是小数点
{
digitFlag=0 ; // 退出循环
char buf[20];
for(int c=0; c<j; c++)
{
buf[c] = *(str-j+i+c);
// printf("%3d", (buf[c]-48) );
}
buf[c] = '\0';
printf("%.3lf\t",data[row]=atof(buf) );
row++ ;
}
}
}
}
}
printf("\nthe total rows is %3d\n",row);
return row;
}
void main()
{
//int (*a)[10];
//char a[10][10];
double *data = (double *)malloc(sizeof(double)*10);
char *numbers="a123*456 -17.9s.60?302ta -89.70 1111111111111212323";
printf("%s\n",numbers);
process(numbers,data);
}
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <malloc.h>
// 如果是小数点则必须保证这个位置的前面和后面中有有一个数字
// 如果是负号则要求
// 数据格式的限制(简化操作)
// 必须保证是符号开始的或者数字开始的制,如果是负号,则后面一定是数字
// 一直查询到非数字和小数点才结束
int process(char *str,double *data)
{
int row = 0 ;
for(int i=0;*(str+i)!='\0';i++)
{
int digitFlag = 0 ;
// 确定首偏移地址
if( isdigit(*(str+i)) || (isdigit(*(str+i+1))&&(*(str+i)=='-')) )
{
int j=1;
char pointfrag = 2; // 一个数字中小数点不能为2
i++;
digitFlag=1; // 表明是数字开端
while( (digitFlag==1)&&(pointfrag>0) )
{
if( isdigit(*(str+i)) )//(*(p+i)>=48&&*(p+i)<=57)
{
i++; // 字符串位置偏移
j++; // 有数数字个数计数值+1
}
else
{
if( *(str+i)=='.' ) // 是小数点
{
pointfrag--;
i++; j++;
}
else // 不是数字 也不是小数点
{
digitFlag=0 ; // 退出循环
char buf[20];
for(int c=0; c<j; c++)
{
buf[c] = *(str-j+i+c);
// printf("%3d", (buf[c]-48) );
}
buf[c] = '\0';
printf("%.3lf\t",data[row]=atof(buf) );
row++ ;
}
}
}
}
}
printf("\nthe total rows is %3d\n",row);
return row;
}
void main()
{
//int (*a)[10];
//char a[10][10];
double *data = (double *)malloc(sizeof(double)*10);
char *numbers="a123*456 -17.9s.60?302ta -89.70 1111111111111212323";
printf("%s\n",numbers);
process(numbers,data);
}