格式转换

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

原文地址:https://www.cnblogs.com/zhuyp1015/p/2507034.html