zoukankan      html  css  js  c++  java
  • 字符串搜索 find()

    参考 《C++ Primer Plus》中文版 P870

    #include <map>
    #include <fstream>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string getData( string key, map<string, string> & data );
    
    //using namespace std;
    int main(int argc, char** argv )
    {
        map<string, string> data;
        string filename = "./parameters.txt";
        ifstream fin( filename.c_str() );
    /*
    c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 
    这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
    */
        if (!fin)//文件不存在
        {
            cerr<<"parameter file does not exist."<<endl;//报错
                    return 0;
        }
        while(!fin.eof()) //文件是否为空
        {
                    string str;
                    getline( fin, str );//把每一行放到str中,不断读取
                    if (str[0] == '#')
                    {
                        // 以‘#’开头的是注释
                        continue;
                    }
    
                    int pos = str.find("=");  // 等于号的位置, P870
                    if (pos == -1)
                    {
                        continue;
                    }
                    string key = str.substr( 0, pos );  //从下标0到pos
                    string value = str.substr( pos+1, str.length() );
                    data[key] = value;
    
                    if ( !fin.good() )
                    {
                        break;
                    }
         }
    float value1 = atof(getData("camera.cx",data).c_str());//上下的区别
         string value2 = getData("camera.cx",data);
            
         cout << value1 << endl;
         cout << value2 << endl;
    }
    string getData( string key ,map<string, string> & data)//成员函数 { map<string, string>::iterator iter = data.find(key);//根据键,找到值 if (iter == data.end()) { cerr<<"Parameter name "<<key<<" not found!"<<endl; return string("NOT_FOUND"); } return iter->second; //second值,first键 }

    str为string类型对象,str.find()返回位置int类型。

     atof 是ascII to float的缩写,它将ascII字符串转换为相应的单精度浮点数,比如传入"1.234",经过处理后就返回float类型的数1.234 。类似的还有atoi 、atol、itoa、ftoa等等。

    读取的文件parameters.txt

    # 这是一个参数文件
    
    detector=ORB
    descriptor=ORB
    good_match_threshold=10
    
    # camera
    camera.cx=682.3;
    camera.cy=254.9;
    camera.fx=979.8;
    camera.fy=942.8;
    camera.scale=1000.0;

      float value1 = atof(getData("camera.cx",data).c_str());
      string value2 = getData("camera.cx",data);

    可以在终端的输出中看到上面两句程序的区别。

  • 相关阅读:
    团队冲刺03
    梦断代码 阅读笔记02
    团队冲刺02
    团队冲刺01
    周总结
    团队工作任务
    阅读笔记3
    梦断代码阅读笔记01
    周总结
    NABCD项目分析
  • 原文地址:https://www.cnblogs.com/112358nizhipeng/p/9219094.html
Copyright © 2011-2022 走看看