float字串轉換成 float數組

來源:互聯網
上載者:User

前幾天遇到一個小問題,需要將格式如

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);
}

 

 

將字串中的數字提取到數組中的方法肯定有很多,說不定一個函數就能實現,還請各位多多指導。

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.