任何人都可以通过将字符串anand padding lenth作为输入来创建一个格式如下例所示的c函数。字符串应该居中对齐,填充(破折号)的长度是常量(比如45),字符串len不会超过填充长度。
示例#1 --------------关于------------
示例#1
----------我的付款----------
答案 0 :(得分:2)
扰流警报!
这是一种不同的方法。找出粘在哪里,然后坚持下去。
char sBase[] = "---------------------------------------------";
char sInsert[] = "ABOUT";
int nStart = (strlen (sBase) - strlen (sInsert)) / 2; // Centre of sInsert goes in centre of sBase
if (nStart >= 0) // Make sure sInsert isn't bigger than sBase
{
memcpy (&sBase [nStart], sInsert, strlen (sInsert)); // Stick it in
}
答案 1 :(得分:1)
问题是“帮助创造”,而不是“创造”,所以这里有一些伪代码:)
let numberOfDashes = TARGET_LENGTH - labelLength
let numberOfLeftDashes = numberOfDashes/2
let numberOfRightDashes = numberOfDashes - numberOfLeftDashes
let paddedString =
repeat('-',numberOfLeftDashes)
+ labelString
+ repeat('-',numberOfRightDashes)
我会留给你用C重写,不应该很难 - 如果有任何问题就放弃评论。
答案 2 :(得分:0)
在这里,您可以处理所有情况,包括比填充范围更长的文本:
char* padCentered(char* out, const char* str, const int len, const char padchar)
{
size_t lenstr = strlen(str);
const char* in = str;
if (lenstr < len) {
memset(out, padchar, len);
} else if (lenstr > len) {
in = (str + (lenstr/2)) - (len/2);
lenstr = len;
}
strncpy(out + ((len/2) - (lenstr/2)), in, lenstr);
out[len] = '\0';
return out;
}
void dopaddedstr()
{
char buf[1024];
printf("%s\n", padCentered(buf, "0123456789", 6, '-'));
printf("%s\n", padCentered(buf, "0123456789", 7, '-'));
printf("%s\n", padCentered(buf, "0123456789", 8, '-'));
printf("%s\n", padCentered(buf, "0123456789", 10, '-'));
printf("%s\n", padCentered(buf, "0123456789", 11, '-'));
printf("%s\n", padCentered(buf, "0123456789", 12, '-'));
printf("%s\n", padCentered(buf, "0123456789", 80, '-'));
}
输出:
234567
2345678
12345678
0123456789
0123456789-
-0123456789-
-----------------------------------0123456789-----------------------------------