float字符串转换成 float数组

前几天遇到一个小问题,需要将格式如

0  0 524 1049 0.9171 113029  323142  87392  1524  1664  25 0.9973 4537 0.5154 33.1722 33.3961

5938  11 116 253 2.3992 74985  479837  347454  2734  2836  12 0.9974 997 0.4939 26.0862 27.2243

……………………

的txt文件中的每行数字提取到一个float型数组中,然后在进行后续的判断。思考了很久终于有了一种解决的办法。

       首先定义CStdioFile file变量,然后用file.open 打开需要转换的数据文件 data.txt  接着while(file.ReadString(str))每次读取一行的字符串到CString类型变量str中。然后调用函数 void  transf(CString str,float result[16])      //每行有16个数字

将str转换成float数组。下面介绍下transf的实现过程。

 

 

 

 

void  transf(CString str,float result[16])
{
 int num=str.GetLength();                                    //得到字符串的长度
 char *buf;                                                         
 char tmp[10]={0};                                          //数字最大的位数
 int m;                                                  
 int * statu;                                                                 
 BOOL F_TRANSF=FALSE;                                  //是否将字符串转换成float数字   
 int count_str=0;                                             //每取str中一个字符加一
 int count_num=0;                                          //每转换一个float数字加一
 buf=(char*)malloc(sizeof(char)* num);        //为str中的字符串分配内存空间
 statu=(BOOL*)malloc(sizeof(BOOL)*num); // 为str中每一个字符的状态分配内存空间
 memset(statu,-1,num);                               //初始化状态
 memcpy(buf,str.GetBuffer(0),num);            //将str中的字符复制到buf中
 for(int i=0; i< num; i++)                            //每次读取一个字符
 { m=buf[i];                                                 //m中暂存下字符
  if( (m>='0' && m <='9') || m=='.')             //如果字符是数字或者是小数点
  { tmp[count_str]=m;                              //将其存入tmp中,等条件成立时转换成数字
   count_str++;
   statu[i]=1;                                            //当前字符状态为数字或者小数点
      
  }
  else if(m == 32 || m== 9  )                   //当前字符是否为空格或者tab键(字符串中每一行的各个数字以空格或者tab键分隔的)
  { statu[i]=0;                                        //当前字符状态是分隔符
   
  }

  if(count_num==15 && (statu[i-1]==0 && statu[i]==1))     //处理字符串中最后一个数字
  { 
   memcpy(tmp,&buf[i],num-i);
   result[count_num]=(float)atof(tmp);
   
  }
  if(statu[i-1]==1 && statu[i]==0)              //如果前一个字符是数字或小数点,后边一个字符是分隔符,则将tmp转换成float数字
  { result[count_num]=(float)atof(tmp);
   count_num++;
   count_str=0;
   memset(tmp,0,10);
  }

 }

 free(buf);                                            //释放内存空间
 free(statu);
}

 

 

将字符串中的数字提取到数组中的方法肯定有很多,说不定一个函数就能实现,还请各位多多指导。

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值