将前导零添加到字符串,不带(s)printf

时间:2011-05-26 19:13:37

标签: c++

我想在字符串中添加一个前导零的变量。 如果没有人提及printf,我在谷歌上找不到任何东西, 但我想在没有(s)printf的情况下这样做。

读者中有人知道吗?

9 个答案:

答案 0 :(得分:50)

如果你想要一个n_zero零的字段,我可以给出这个单行解决方案:

  std::string new_string = std::string(n_zero - old_string.length(), '0') + old_string;

例如:     old_string =" 45&#34 ;; n_zero = 4;     new_string =" 0045&#34 ;;

答案 1 :(得分:46)

您可以使用std::string::insertstd::stringstreamstream manipulatorsBoost.Format

#include <string>
#include <iostream>
#include <iomanip>
#include <boost/format.hpp>
#include <sstream>

int main() {
  std::string s("12");
  s.insert(0, 3, '0');
  std::cout << s << "\n";

  std::ostringstream ss;
  ss << std::setw(5) << std::setfill('0') << 12 << "\n";
  std::string s2(ss.str());
  std::cout << s2;

  boost::format fmt("%05d\n");
  fmt % 12;
  std::string s3 = fmt.str();
  std::cout << s3;
}

答案 2 :(得分:16)

您可以执行以下操作:

std::cout << std::setw(5) << std::setfill('0') << 1;

这应该打印00001

但请注意,填充字符是“粘性的”,因此当您使用零填充时,您必须再次使用std::cout << std::setfill(' ');来获取常规行为。

答案 3 :(得分:12)

// assuming that `original_string` is of type `std:string`:

std::string dest = std::string( number_of_zeros, '0').append( original_string);

答案 4 :(得分:3)

C ++的做法是使用setwios_base::widthsetfill

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    const int a = 12;
    const int b = 6;

    cout << setw(width) << row * col;
    cout << endl;

    return 0;
}

答案 5 :(得分:2)

这适合我。您不需要将setfill切换回&#39; &#39;,因为这是一个临时流。

std::string to_zero_lead(const int value, const unsigned precision)
{
     std::ostringstream oss;
     oss << std::setw(precision) << std::setfill('0') << value;
     return oss.str();
}

答案 6 :(得分:1)

memcpy(target,'0',sizeof(target));
target[sizeof(target)-1] = 0;

然后将任何你想要的字符串粘贴在缓冲区的末尾。

如果是整数,请记住log_base10(number)+1(又名ln(number)/ln(10)+1)为您提供数字的长度。

答案 7 :(得分:0)

一行,但最多只限于整数和6个零:

int number = 42;
int leading = 3; //6 at max
std::to_string(number*0.000001).substr(8-leading); //="042"

Run it

答案 8 :(得分:0)

如果要修改原始字符串而不是创建副本,可以使用std::string::insert()

std::string s = "123";
unsigned int number_of_zeros = 5 - s.length(); // add 2 zeros

s.insert(0, number_of_zeros, '0');

结果:

00123