自定义填充空格函数

在一些输出的时候,由于某些输出的结果不定长,导致最后的输出的结果每一行不能对齐,用空格填充又不确定填充多少空格

为了解决这个小问题,自编写如下小函数

原理:每段输出的结果无论多长应该有理论的最大长度,最大长度减去实际输出长度,就是应该填充的空格数

void fillspace(char* src,char* dest,int max) {

int i = 0;
int space_count = 0;
int src_len = 0;
unsigned char space = ' ';
char space_str[max];
src_len = strlen(src);
space_count = max - src_len;
memset(space_str,0,sizeof(space_str));
if (space_count == 0) {
memcpy(dest,src,(strlen(src) + 1));
}
else {
for (i = 0;i < space_count;i++) {
memcpy((void*)&space_str[i],(const void*)&space,1);
}
space_str[i] = '\0';
sprintf(dest,"%s%s",src,space_str);
}

}
int main() {
char str[20] = {0};
fillspace("1234",str,15);
printf("str = !%s!  len = %d\n",str,strlen(str));
//结果:str = !1234          !len = 15
return 0;
}


不使用传入传出参数,在函数内定义静态字符数组,使用返回值的另一种方式

char* fillspace(char* src,int max) {
int i = 0;

int space_count = 0;
int src_len = 0;
unsigned char space = ' ';
char space_str[max];
static char dest[256] = {0};
src_len = strlen(src);
space_count = max - src_len;
memset(space_str,0,sizeof(space_str));
if (space_count == 0) {
memcpy(dest,src,(strlen(src) + 1));
return dest;
}
else {
for (i = 0;i < space_count;i++) {
memcpy((void*)&space_str[i],(const void*)&space,1);
}
space_str[i] = '\0';

sprintf(dest,"%s%s",src,space_str);
return dest;
}

}
int main() {

char*str = NULL;
str = fillspace("1234",15);

printf("str = !%s! len = %d\n",str,strlen(str));
//结果:str = !1234          !len = 15
return 0;
}

如有错误,敬请指点



### C++ 中 `cout` 输出前置空格的方法 在 C++ 中,可以利用标准库中的流操纵器来控制输出格式。为了实现带有前置空格的输出效果,通常会结合使用 `setw()` 和 `setfill()` 函数。 #### 使用 `iomanip` 库函数设置宽度和填充字符 要使输出具有指定数量的前置空格,可以通过如下方式: 1. **引入必要的头文件** ```cpp #include <iostream> #include <iomanip> // setw, setfill 所需头文件 using namespace std; ``` 2. **定义并应用流操作符** 通过调用 `setw(n)` 来设定最小字段宽度,并配合 `setfill(' ')` 设置默认填充空格。当实际数据长度小于给定宽度时,不足部分会被自动补足为所设填充字符(此处为空格)。需要注意的是,一旦设置了新的填充字符,则会影响后续所有未特别指明填充项的操作;因此建议每次调整前都重置回初始状态即 `' '` 或者仅临时作用于单次输出语句内[^1]。 3. **具体实例展示** 下面给出一段完整的代码片段用于说明如何向左对齐字符串的同时在其左侧添加固定数目的空白作为间隔: ```cpp int main(){ string text = "example"; // 向左对齐,总宽15个字符,其余位置填入空格 cout << left << setw(15) << setfill(' ') << text; return 0; } ``` 此段程序执行后将会打印出一个由多个连续空格加上单词 `"example"` 构成的一行文本,其中整个表达式的显示区域被限定在一个宽度为 15 的虚拟框里,而多余的空间则全部以空格填补。 对于数值类型的变量同样适用上述方法来进行格式化处理。例如想要让整型数字始终占据一定位数的位置并且前面不够的部分补充零或其他自定义符号也是可行的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值