• 格式转换


    今天在QQ群中有人问起这两个问题,我只是在oneNote中做过笔记,也不是很熟,只不过oneNote的搜索功能太难用了。觉得这些基本功问题还是要熟悉才好。

    首先是格式转换,什么浮点数转换为字符串,字符串转换为浮点数,建议使用C++ 的字符处理类,stringstream,在exceptional C++中好像说过sprintf什么的不是很安全。下面来看例子:

    #include <sstream>
    #include <iostream>
    using namespace std;

    int main()

      stringstream  ss;
      double a = 3.141592;
      double b;
      string r;
      ss << a;
      ss >> r;
      cout << r << endl;
      ss.clear();//注意使用多个转换的话,在中间要使用clear()
      ss << r;
      ss >> b;
      cout << b << endl;

      return 0;
    }

    stringstream很好用,但是sscanf和sprintf在很多地方也很有用,来看几个简单的例子。

    int a, b, c

    sscanf("2012:05:17", "%d:%d:%d", &a, &b, &c);

    上面的例子将年月日分别读入到 a , b ,c 中保存起来。

    当然也可以这样:

    sscanf("2012-05-17", "%d-%d-%d", &a, &b, &c);

    效果是一样的。

    对于sscanf还可以使用正则表达式进行匹配:

    sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);

    printf("%s\n", buf);

    结果为:123456abcdedf

    当输入:

    sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);

    printf("%s\n",buf);

    结果为:123456

    sprintf函数的定义如下

    int sprintf( char *buffer, const char *format [, argument] ... );

    通过sprintf函数可以将后面的变长参数按照format的格式打印到buffer中,不失为一种格式转换的利器。

    char s[20];

    sprintf(s, "%f", 3.1415926);

    printf("%s\n",s)

    结果为:3.141593

    还可以指定宽度:

    sprintf(s, "%10.3f", 3.1415626);

    printf("%s\n",s)

    结果为:3.142

    这种情况也不在话下:

    sprintf(s, "%d", 123);

    printf("%s\n",s)

    结果为:123

  • 相关阅读:
    gulp之压缩合并MD5清空替换加前缀以及自动编译自动刷新浏览器大全
    HTML5之文件API
    Angular2之路由学习笔记
    nodejs之主机不能访问到虚拟机的web服务器
    学习CSS3动画(animation)
    jQuery之ajax错误调试分析
    Angular2之管道学习笔记
    css3之3D魔方动画(小白版)
    关于二维网格导入autodyn的问题
    两个橡胶球自由落体撞击弹性板
  • 原文地址:https://www.cnblogs.com/zhuyp1015/p/2507034.html
Copyright © 2020-2023  润新知