Добавить ведущие нули в строку, без (s) printf - PullRequest
21 голосов
/ 26 мая 2011

Я хочу добавить переменную ведущих нулей в строку.Я ничего не мог найти в Google, без того, чтобы кто-то не упомянул (а) printf, но я хочу сделать это без (а) printf.

Кто-нибудь из читателей знает способ?

Ответы [ 8 ]

51 голосов
/ 13 октября 2014

Я могу дать это однострочное решение, если вы хотите поле с нулями n_zero:

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

Например: old_string = "45";n_zero = 4;new_string = "0045";

48 голосов
/ 26 мая 2011

Вы можете использовать std::string::insert, std::stringstream с потоковыми манипуляторами или Boost.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;
}
16 голосов
/ 26 мая 2011

Вы можете сделать что-то вроде:

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

Это должно вывести 00001.

Обратите внимание, однако, что символ заполнения является «липким», поэтому, когда вы закончите использовать заполнение нулями, вам придется использовать std::cout << std::setfill(' ');, чтобы снова получить обычное поведение.

12 голосов
/ 26 мая 2011
// assuming that `original_string` is of type `std:string`:

std::string dest = std::string( number_of_zeros, '0').append( original_string);
3 голосов
/ 26 мая 2011

C ++ способ сделать это с setw , ios_base :: width и setfill

#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;
}
2 голосов
/ 23 августа 2017

Это хорошо работает для меня. Вам не нужно переключать setfill обратно на '', так как это временный поток.

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();
}
1 голос
/ 26 мая 2011
memcpy(target,'0',sizeof(target));
target[sizeof(target)-1] = 0;

Затем вставьте любую строку, которую вы хотите, с нулевым префиксом в конце буфера.

Если это целое число, помните, log_base10(number)+1 (он же ln(number)/ln(10)+1) дает длину номера.

0 голосов
/ 01 марта 2018

Одна строка, но ограничена целыми числами и 6 нулями при максимуме:

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

Запустите его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...