我有一些不同长度的数字(如1,999,76492,等等),我想将它们全部转换为具有共同长度的字符串(例如,如果长度为6,那么这些字符串将为:'000001' ,'000999','076492').
换句话说,我需要在数字中添加正确数量的前导零.
int n = 999; string str = some_function(n,6); //str = '000999'
在C++中有这样的函数吗?
或使用stringstreams:
#include#include std::stringstream ss; ss << std::setw(10) << std::setfill('0') << i; std::string s = ss.str();
我编译了我在arachnoid.com上找到的信息,因为我更喜欢iostreams的类型安全方式.此外,您可以在任何其他输出流上同样使用此代码.
char str[7]; snprintf (str, 7, "%06d", n);
见snprintf
您可能想要注意的一件事是当您使用该stringstream
方法时可能会发生的潜在锁定.在Visual Studio 2008附带的STL中,至少有许多锁被取出并在格式化过程中使用各种区域设置信息时被释放.这可能会或可能不会成为您的问题,具体取决于您可能同时将数字转换为字符串的线程数量...
该sprintf
版本不采用任何锁定(至少根据我正在开发的锁定监视工具......)因此可能在并发情况下使用"更好".
我之所以注意到这一点,是因为我的工具最近吐出了'locale'锁,因为它是我服务器系统中锁争用最多的锁之一; 这有点令人意外,可能会让我修改我一直在采取的方法(即sprintf
从中回来stringstream
)......