在c中的字符串左侧添加空格

时间:2015-11-12 07:27:41

标签: c arrays string function char

如何编写一个函数来在字符串的左端添加额外的空格,使其至少为n长度。如果字符串已经是n个字符或更长,则不应更改字符串。

假设原型是:

void padLeft(char a[], int n);

有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:4)

假设您打算以相对较低的级别对其进行编码,您可以按照以下步骤操作。

  1. 使用strlen()获取当前长度,调用此len。如果它已经至少有n个字符,请返回。

  2. 使用memmove()str[0]复制到str[n - len]len + 1个字节)。与memmove()不同,strcpy()函数可以正确处理重叠。

  3. 使用n - len在空格中添加第一个memset()个字符。

  4. 例如,假设您要将字符串"pax"填充到七个字符。它将遵循以下步骤(其中.是末尾的空终止符,?表示任何字符):

    0123456789    Positions within string.
    pax.??????    Initial situation, len = 3, n = 7.
    ????pax.??    memmove (str + 7 - 3, str, 4);
        pax.??    memset (str, ' ', 7 - 3);
    

    好的,这就是我要你停止阅读的地方,直到你离开并自己尝试。完成后,调试让它满意,并将其与专业编码员提出的结果进行比较:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    void padleft (char a[], int n) {
        size_t len = strlen (a);
        if (len >= n) return;
        memmove (a + n - len, a, len + 1);
        memset (a, ' ', n - len);
    }
    
    int main (int argc, char *argv[]) {
        static char buffer[1000]; // usually a no-no, but fine for testing.
    
        if (argc != 3) {
            fprintf (stderr, "Usage: padleft <string> <size>\n");
            return 1;
        }
    
        int sz = atoi (argv[2]);
        strcpy (buffer, argv[1]);
    
        padleft (buffer, sz);
        printf ("[%s] padded to size %d is [%s]\n", argv[1], sz, buffer);
        return 0;
    }
    

答案 1 :(得分:1)

您可以尝试使用如下的printf函数:

printf("|%10s|", "Hello");   //Will add spaces to the left of Hello
printf("|%-10s|", "Hello");   //Will add spaces to the right of Hello

<强> IDEONE DEMO

答案 2 :(得分:0)

使用像Health_1 Health_n 1 2 4 2 5 5 . 1 1 1 memmove这样的函数是一个好主意,但手动解决它是很好的,知道它是如何工作的。一般的想法是将字符串的元素向右移,并在左端添加空格。

memset