Функция C для форматирования строки с тире - PullRequest
0 голосов
/ 20 января 2011

Может ли кто-нибудь создать функцию c, которая форматирует, как показано в примере ниже, взяв в качестве входных данных строку anand padding lenth. Строка должна быть выровнена по центру, а длина отступа (тире) постоянна (скажем, 45), а длина строки не будет превышать длину отступа.

пример # 1 -------------- О ------------

пример # 1

---------- МОИ ОПЛАТЫ ----------

Ответы [ 3 ]

2 голосов
/ 20 января 2011

Оповещение о спойлере!

Вот другой подход. Подумайте, где его наклеить, а потом воткните.

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 голос
/ 20 января 2011

Вопрос заключался в том, чтобы «помочь создать», а не «создать», поэтому вот вам псевдокод:)

let numberOfDashes = TARGET_LENGTH - labelLength
let numberOfLeftDashes = numberOfDashes/2
let numberOfRightDashes = numberOfDashes - numberOfLeftDashes

let paddedString =
    repeat('-',numberOfLeftDashes)
  + labelString
  + repeat('-',numberOfRightDashes)

Я оставлю вам переписать это на C, это не должно быть сложно - оставьте комментарий, если возникнут проблемы.

0 голосов
/ 20 января 2011

Здесь все идет, это обрабатывает все случаи, включая более длинный текст, чем вписывается в дополняемый диапазон:

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-----------------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...