zoukankan      html  css  js  c++  java
  • 格式转换

    今天在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

  • 相关阅读:
    装饰者模式(包装模式)
    内网穿透
    SpringMVC框架工作流程图及工作原理
    Java 使用 Socket 判断某服务能否连通
    最简单的一个socket客户端,保持连接服务端
    java读取txt文件
    SQL汇总
    最简单的一个socket服务端
    初级软件工程师怎么走向BATJ?——献给迷茫中的测试人
    软件测试工程师——100问面试题,你敢来接招吗?
  • 原文地址:https://www.cnblogs.com/zhuyp1015/p/2507034.html
Copyright © 2011-2022 走看看