将指定数量的零填充到char数组

时间:2014-09-03 06:09:04

标签: c++

我想填充一个给定的char数组,使其成为一个15个字符的数组。

例如。如果数组包含两个字符1,2则应填写13 0个字符以在000000000000012中填充,如果包含5个字符,则应填充10 0个字符。结果数组应始终包含15个字符。

找到一个解决方案here,但是对于stl字符串我需要类似的char数组解决方案。请帮忙。 我试过的是:

char moneyArray[256];
memset(moneyArray, 0, 256);    
for(int i=0;i<(15-strlen(moneyArray))-1;i++)
    sprintf(moneyArray,"0%s",moneyArray);

但我正在寻找标准解决方案,如果可能的话,使用std函数可能会?

3 个答案:

答案 0 :(得分:2)

您可以使用以下pad功能:

#include <iostream>
#include <cstring>

void pad(char *s, int n, int c) {
    char *p = s + n - strlen(s);
    strcpy(p, s);
    p--;
    while (p >= s) { p[0] = c; p--; }
}

int main () { 
    char b[16] = "123";
    pad(b, 15, '0');
    std::cout << b << std::endl;
    return 0; 
}

答案 1 :(得分:2)

如果你对std::string很好(我认为你应该这样),你可以使用它的填充构造函数:

char        s[]    = "12";
std::string padded = std::string( (15 - strlen(s) ), '0').append(s);

当然,您可能需要首先检查strlen(s) > 15

答案 2 :(得分:1)

你有各种选择;其中一个将是(再次假设我们已经知道moneyArray包含一个字符串,并且至少是一个16字节的缓冲区):

size_t len = strlen(moneyArray); 
memmove(moneyArray + 15 - len, moneyArray, len + 1);
memset(moneyArray, '0', 15 - len);