Centering strings with printf()

前端 未结 7 1296
挽巷
挽巷 2020-12-01 10:33

By default, printf() seems to align strings to the right.

printf(\"%10s %20s %20s\\n\", \"col1\", \"col2\", \"col3\");
/*       col1                     


        
7条回答
  •  感动是毒
    2020-12-01 11:25

    You may try write own function for this problem.

    /**
     * Returns a sting "str" centered in string of a length width "new_length".
     * Padding is done using the specified fill character "placeholder".
     */
    char *
    str_center(char str[], unsigned int new_length, char placeholder)
    {
        size_t str_length = strlen(str);
    
        // if a new length is less or equal length of the original string, returns the original string
        if (new_length <= str_length)
            return str;
    
        char *buffer;
        unsigned int i, total_rest_length;
    
        buffer = malloc(sizeof(char) * new_length);
    
        // length of a wrapper of the original string
        total_rest_length = new_length - str_length;
    
        // write a prefix to buffer
        i = 0;
        while (i < (total_rest_length / 2)) {
            buffer[i] = placeholder;
            ++i;
        }
        buffer[i + 1] = '\0';
    
        // write the original string
        strcat(buffer, str);
    
        // write a postfix to the buffer
        i += str_length;
        while (i < new_length) {
            buffer[i] = placeholder;
            ++i;
        }
        buffer[i + 1] = '\0';
    
        return buffer;
    }
    

    Results:

    puts(str_center("A", 0, '-')); // A
    puts(str_center("A", 1, '-')); // A
    puts(str_center("A", 10, '-')); // ----A-----
    puts(str_center("text", 10, '*')); // ***text***
    puts(str_center("The C programming language", 26, '!')); // The C programming language
    puts(str_center("The C programming language", 27, '!')); // The C programming language!
    puts(str_center("The C programming language", 28, '!')); // !The C programming language!
    puts(str_center("The C programming language", 29, '!')); // !The C programming language!!
    puts(str_center("The C programming language", 30, '!')); // !!The C programming language!!
    puts(str_center("The C programming language", 31, '!')); // !!The C programming language!!!
    

提交回复
热议问题