当前位置:  开发笔记 > 编程语言 > 正文

C中的字符串填充

如何解决《C中的字符串填充》经验,为你挑选了2个好方法。

我写了这个函数,它应该做StringPadRight("Hello",10,"0") - >"Hello00000".

char *StringPadRight(char *string, int padded_len, char *pad) {
    int len = (int) strlen(string);
    if (len >= padded_len) {
        return string;
    }
    int i;
    for (i = 0; i < padded_len - len; i++) {
        strcat(string, pad);
    }
    return string;
}

它有效,但有一些奇怪的副作用......其他一些变量也发生了变化.我怎样才能解决这个问题?



1> Tom Leys..:

知道printf为你做填充可能会有所帮助,使用%-10s,因为格式字符串会在10个字符长的字段中填充输入

printf("|%-10s|", "Hello");

将输出

|Hello     |

在这种情况下, - 符号表示"左对齐",10表示"字段中的十个字符",s表示您正在对齐字符串.

Printf样式格式有多种语言版本,并且在网络上有很多参考.这是解释格式化标志的许多页面之一.像往常一样,WikiPedia的printf页面也有帮助(主要是有关printf传播范围广泛的历史教训).


如果你想让字符串被除了空格之外的另一个字符填充怎么办?有没有办法做这个C的printf?

2> J Jorgenson..:

对于'C',当需要自定义填充时,[s] printf的替代(更复杂)使用不需要任何malloc()或预格式化.

诀窍是对%s使用'*'长度说明符(min和max),加上填充了填充字符的字符串到最大潜在长度.

int targetStrLen = 10;           // Target output length  
const char *myString="Monkey";   // String for output 
const char *padding="#####################################################";

int padLen = targetStrLen - strlen(myString); // Calc Padding length
if(padLen < 0) padLen = 0;    // Avoid negative length

printf("[%*.*s%s]", padLen, padLen, padding, myString);  // LEFT Padding 
printf("[%s%*.*s]", myString, padLen, padLen, padding);  // RIGHT Padding 

"%*.*s"可以放在"%s"之后的OR之前,这取决于LEFT或RIGHT填充的要求.

[####Monkey] <-- Left padded, "%*.*s%s"
[Monkey####] <-- Right padded, "%s%*.*s"

我发现PHP printf(这里)确实支持在%s格式中使用单引号(')后跟自定义填充字符来提供自定义填充字符的功能.
printf("[%'#10s]\n", $s); // use the custom padding character '#'
生产:
[####monkey]

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有