Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 添加前导零';s到字符串,不带printf_C++ - Fatal编程技术网

C++ 添加前导零';s到字符串,不带printf

C++ 添加前导零';s到字符串,不带printf,c++,C++,我想在字符串中添加一个前导为零的变量。 我在谷歌上找不到任何东西,没有人提到printf, 但我想在不使用printf的情况下执行此操作 读者中有谁知道路吗 memcpy(target,'0',sizeof(target)); target[sizeof(target)-1] = 0; 然后,在缓冲区的末尾粘贴您想要的前缀为零的字符串 如果它是一个整数,请记住log\u base10(number)+1(又称ln(number)/ln(10)+1)给出了数字的长度。您可以使用、使用或: //

我想在字符串中添加一个前导为零的变量。 我在谷歌上找不到任何东西,没有人提到printf, 但我想在不使用printf的情况下执行此操作

读者中有谁知道路吗

memcpy(target,'0',sizeof(target));
target[sizeof(target)-1] = 0;
然后,在缓冲区的末尾粘贴您想要的前缀为零的字符串

如果它是一个整数,请记住
log\u base10(number)+1
(又称
ln(number)/ln(10)+1
)给出了数字的长度。

您可以使用、使用或:

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

std::string dest = std::string( number_of_zeros, '0').append( original_string);
#包括
#包括
#包括
#包括
#包括
int main(){
std::字符串s(“12”);
s、 插入(0,3,'0');

STD::CUT< P> C++的方式是用,和< /P>
#包括
#包括
使用名称空间std;
int main()
{
常数INTA=12;
常数int b=6;

cout您可以执行以下操作:

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

std::cout如果您想要一个n_零的字段,我可以给出这一行解决方案:

  std::string new_string = std::string(n_zero - old_string.length(), '0') + old_string;
例如: 旧字符串=“45”;n\u零=4;
new_string=“0045”

这对我很有效。您不需要将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();
}
std::字符串到零前导(常量int值,常量无符号精度)
{
std::ostringstream oss;

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

结果:

00123

不,谢谢你的尝试,但我希望能够添加可变数量的零。@Guus:这是可变数量的零。但是,你可以替换(sizeof(target))如果它能让你高兴的话,请使用其他数字。@Guus:具体地说,从你下面的评论中,你想要%05d,对吗?如果缓冲区有六个字符长,这正是我的代码可以为你做的(至少零填充部分,将数字放在末尾是留给你的).不,这和sprintf差不多,但是谢谢你的输入(:不,谢谢你的输入,但是使用sprintf的方式是一样的(:似乎没有粘性。
std::cout@AleksanderFular
std::setw
没有粘性。
std::setfill
有粘性,但是如果没有过大的宽度来给它一些事情做,它就没有多大用处。因此,您的第一个
1
获得
setw(5)
,因此前面有前导零,但是
setw
被放回默认值,因此第二个
1
将被打印为
1
。因此,
00001
+
1
=
000011
。关键是如果以后设置
setw
,您会发现前面的
setfill
字符r仍然有效,因为
setfill
is not sticky=>不会重置为其默认的空格。这正是我所需要的。谢谢。这不就是在不考虑“原始字符串”长度的情况下添加零吗?
number\u of\u zeros=4 original\u string=“99”dest将变成:000099(而不是0099)
。如果我错了,或者我可能不理解“前导零”的真正含义,请纠正我…@lepe它以书面形式回答了这个问题。OP是否编写了它们真正的含义是另一回事。我喜欢这一点。这意味着我不必构造stringstream,它在内部结构方面有相当多的负担。非常好的解决方案打开!当(n_zero-old_string.length())时会发生什么是负数?编辑:刚刚测试过,传递负数似乎仍然有效。@Castaa字符数的参数是
std::string::size_type
,与stdlib中的大多数大小类型一样,它是无符号的。因此,如果用户传递负数,它将被环绕,并将产生一个大的正数。因此,它应该“起作用”,但可能不会起到预期的/有用的作用(因此无符号大小类型不好,m'kay)。应用程序:将整数填充到20个字符:
auto padded=std::To_string(num);padded.insert(0,20U-std::min(std::string::size_type(20),padded.length()),'0');
如果要填充的字符串太长,
min
可以防止您缠绕字符串。(对于任何64位以下的整数,20个字符都不会有此问题)。需要转换为
size\u type
,因为min抱怨某些平台不匹配。我希望您可以使用
std::string
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();
}
std::string s = "123";
unsigned int number_of_zeros = 5 - s.length(); // add 2 zeros

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