C函数用短划线格式化字符串

时间:2011-01-20 13:38:38

标签: c string format

任何人都可以通过将字符串anand padding lenth作为输入来创建一个格式如下例所示的c函数。字符串应该居中对齐,填充(破折号)的长度是常量(比如45),字符串len不会超过填充长度。

示例#1 --------------关于------------

示例#1

----------我的付款----------

3 个答案:

答案 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-----------------------------------