当前位置:  开发笔记 > 编程语言 > 正文

将数字转换为C++中具有指定长度的字符串

如何解决《将数字转换为C++中具有指定长度的字符串》经验,为你挑选了3个好方法。

我有一些不同长度的数字(如1,999,76492,等等),我想将它们全部转换为具有共同长度的字符串(例如,如果长度为6,那么这些字符串将为:'000001' ,'000999','076492').

换句话说,我需要在数字中添加正确数量的前导零.

int n = 999;
string str = some_function(n,6);
//str = '000999'

在C++中有这样的函数吗?



1> xtofl..:

或使用stringstreams:

#include 
#include 

std::stringstream ss;
ss << std::setw(10) << std::setfill('0') << i;
std::string s = ss.str();

我编译了我在arachnoid.com上找到的信息,因为我更喜欢iostreams的类型安全方式.此外,您可以在任何其他输出流上同样使用此代码.


仅供参考 - 这需要包含文件`sstream`和`iomanip`.

2> Isak Savo..:
char str[7];
snprintf (str, 7, "%06d", n);

见snprintf


arg#2是size_t,而不是len,所以它是7,而不是6.但是更好地使用sizeof.

3> Len Holgate..:

可能想要注意的一件事是当您使用该stringstream方法时可能会发生的潜在锁定.在Visual Studio 2008附带的STL中,至少有许多锁被取出并在格式化过程中使用各种区域设置信息时被释放.这可能会或可能不会成为您的问题,具体取决于您可能同时将数字转换为字符串的线程数量...

sprintf版本不采用任何锁定(至少根据我正在开发的锁定监视工具......)因此可能在并发情况下使用"更好".

我之所以注意到这一点,是因为我的工具最近吐出了'locale'锁,因为它是我服务器系统中锁争用最多的锁之一; 这有点令人意外,可能会让我修改我一直在采取的方法(即sprintf从中回来stringstream)......

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有