CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

由字符串到浮点数转换的小问题

楼主zzyyjj(学海无崖)2003-06-01 09:47:05 在 C/C++ / C++ 语言 提问

现在我通讯程序里   收到的字符串为“[01]32.9[02]54.6[03]84.6[04]45.4";  
  请问我怎么样才可以   把   32.9     54.6     84.6   45.4   几个数分别付给   float   a1   a2   a3   a4;呢? 问题点数:0、回复次数:8Top

1 楼stukov2002(卡拉是头猪)回复于 2003-06-01 10:07:08 得分 0

 
   
  #include   <string.h>  
  #include   <stdio.h>  
   
  char   string[]   =   “[01]32.9[02]54.6[03]84.6[04]45.4";  
  char   seps[]       =   "[";  
  char   *token;  
  float   a[10];  
   
  void   main(   void   )  
  {  
        int         n   =   0;  
   
        token   =   strtok(   string,   seps   );  
        while(   token   !=   NULL   )  
        {  
              a[n]   =   atof(token   +   4);              
              printf("%s\t",   token   +   4);  
              printf("%f\n",   a[n];  
              n   ++;  
              token   =   strtok(   NULL,   seps   );  
        }  
  }  
   
   
  Top

2 楼bigtea(企鹅)回复于 2003-06-01 11:47:09 得分 0

楼上的方法是以'['开始加4个字符,开始读取有效值。但如果是'[101]43.55[567]45.5'字符串呢。  
  判断一个('[',']')后,开始读取有效值。是否更好一些。  
  Top

3 楼fangrk(加把油,伙计!)回复于 2003-06-01 12:06:13 得分 0

#include   <string>  
  #include   <sstream>  
  #include   <iostream>  
  #include   <vector>  
  #include   <algorithm>  
  #include   <iterator>  
  using   namespace   std;  
  int   main()  
  {  
  const   string   str1("[0.1]32.9[02]54.6[03.]84.6[04]45.4[101]43.55[567]45.5[1.23]3.14");  
  char   NoUseChar;//'['   or   ']'  
  float   NoUseFloat;  
  float   ExtractFloat;  
  istringstream   ss(str1);  
  vector<float>   Data;  
  while(true){  
          ss>>NoUseChar>>NoUseFloat>>NoUseChar>>ExtractFloat;  
          if(ss.fail())   break;  
          Data.push_back(ExtractFloat);  
  }  
  copy(Data.begin(),Data.end(),ostream_iterator<float>(cout,"\t"));  
  }  
   
  C:\temp>bcc32   -WR   -WC   csdn.cpp  
  Borland   C++   5.6.4   for   Win32   Copyright   (c)   1993,   2002   Borland  
  csdn.cpp:  
  Turbo   Incremental   Link   5.64   Copyright   (c)   1997-2002   Borland  
   
  C:\temp>csdn  
  32.9         54.6         84.6         45.4         43.55       45.5         3.14  
  C:\temp>Top

4 楼hyifeng()回复于 2003-06-01 13:04:26 得分 0

fangrk的方法总是令人喜欢Top

5 楼hyifeng()回复于 2003-06-01 14:16:25 得分 0

还有一种办法,不知道比起fangrk的效率如何:  
   
  #include   <iostream>  
  #include   <vector>  
  #include   <algorithm>  
  #include   <iterator>  
  #include   <boost/regex.hpp>  
  #include   <boost/lexical_cast.hpp>  
   
  int   main(int   argc,char**   argv)   {  
      std::vector<float>   data;  
      std::string   text("[0.1]32.9[02]54.6[03.]84.6[04]45.4[101]43.55[ABC]45.5[1.23]3.14");  
      std::string::const_iterator   start(text.begin()),   end(text.end());  
      boost::regex   expression("\\[[^\\]]*\\]([^\\[]+)");  
      boost::match_results<std::string::const_iterator>   what;  
      unsigned   int   flags   =   boost::match_default;  
      while(boost::regex_search(start,   end,   what,   expression,   flags))   {  
          try   {  
              data.push_back(  
                  boost::lexical_cast<float>(std::string(what[1].first,   what[1].second))  
              );  
          }   catch(boost::bad_lexical_cast&   e)   {  
              std::cerr   <<   e.what();  
              return   1;  
          }  
          start   =   what[0].second;  
          flags   |=   boost::match_prev_avail;  
          flags   |=   boost::match_not_bob;  
      }  
      std::copy(data.begin(),   data.end(),   std::ostream_iterator<float>(std::cout,   "   "));  
      return   0;  
  }Top

6 楼zzyyjj(学海无崖)回复于 2003-06-02 11:14:37 得分 0

高手!  
  但如果是"[07]32.9[03]54.6[05]84.6[04]45.4[01]43.55[02]45.5F  
  如果要根据括号里的数i   分配给   float   a[i]呢  
  ^_^Top

7 楼peon(加菲-加菲 一只特立独行的猫)回复于 2003-06-02 11:42:03 得分 0

sscanfTop

8 楼hyifeng()回复于 2003-06-02 12:26:51 得分 0

我的程序或fangrk前辈的程序稍作更改就可以了:  
  while(true){  
  ss>>NoUseChar>>UsefulInt/*原来没用,现在有用了*/>>NoUseChar>>ExtractFloat;  
  if(ss.fail())   break;  
  a[UsefulInt]   =   ExtractFloat;  
  }  
  Top

相关问题

  • 转换字符串到浮点数
  • 字符串转换成浮点数
  • 有没有把浮点数转换成字符串的函数
  • 把整数或浮点数转换成字符串的问题
  • 浮点数转换字符串的问题
  • 怎样将字符串转换为浮点数?
  • 很简单的浮点数转换成字符串问题!
  • 有没有浮点型向字符串转换的函数?
  • 新手问题:字符串转换成浮点数组?
  • EVC中如何将字符串转换为浮点数

关键词

  • boost
  • extractfloat
  • nousechar
  • 字符串
  • token
  • std
  • ss
  • float
  • include
  • seps

得分解答快速导航

  • 帖主:zzyyjj

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo