Центрирование строк с printf ()

Мои 5 центов:

  1. , самое главное, python освобождает память только для ссылочных объектов (не для классов, потому что это просто контейнеры или пользовательские типы данных). Опять же, в python все является объектом, поэтому int, float, string, [], {} и () все являются объектами. Это означает, что если ваша программа больше не ссылается на них, они становятся жертвами сбора мусора.
  2. Хотя python использует «счетчик времени» и «GC» для освобождения памяти (для объектов, которые не используются) эта свободная память не возвращается обратно в операционную систему (в Windows это может быть другой вариант). Это означает, что свободный кусок памяти возвращается обратно к интерпретатору python не к операционной системе. Таким образом, ваш процесс python будет иметь одинаковую память. Тем не менее, python будет использовать эту память для выделения другим объектам.

Очень хорошее объяснение для этого дано в: http://deeplearning.net/software/theano/tutorial/ Python-памяти management.html

23
задан Pieter 17 March 2010 в 11:06
поделиться

4 ответа

printf сам по себе не справится, но вы можете поиграть с "косвенной" шириной, которая задает ширину, считывая ее из аргумента. Попробуем так (хорошо, не идеально)

void f(char *s)
{
        printf("---%*s%*s---\n",10+strlen(s)/2,s,10-strlen(s)/2,"");
}
int main(int argc, char **argv)
{
        f("uno");
        f("quattro");
        return 0;
}
29
ответ дан 29 November 2019 в 02:16
поделиться

@ GiuseppeGuerrini's был полезен, предлагая, как использовать спецификаторы формата печати и разделяя пробел. К сожалению, он может усекать текст.

Следующее решает проблему усечения (при условии, что указанное поле на самом деле достаточно велико, чтобы вместить текст).

void centerText(char *text, int fieldWidth) {
    int padlen = (fieldWidth - strlen(text)) / 2;
    printf(%*s%s%*s\n", padLen, "", text, padlen, "");
} 
6
ответ дан clearlight 29 November 2019 в 02:16
поделиться

Нет спецификатора формата printf () для центрирования текста.

Вам нужно будет написать свою собственную функцию или найти библиотеку, которая обеспечивает функциональность, которую вы ищете.

2
ответ дан 29 November 2019 в 02:16
поделиться

Да, вам придется либо написать свою собственную функцию который возвращает "test" и т. д., например

printf("%s %s %s", center("col1", 10), center("col2", 20), center("col3", 20));

Или у вас есть функция center_print, что-то вроде следующего:

void center_print(const char *s, int width)
{
        int length = strlen(s);
        int i;
        for (i=0; i<=(width-length)/2; i++) {
                fputs(" ", stdout);
        }
        fputs(s, stdout);
        i += length;
        for (; i<=width; i++) {
                fputs(" ", stdout);
        }
}
0
ответ дан 29 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: