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

标签 c arrays string function char

<分区>

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

假设原型(prototype)是:

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

有人可以帮我解决这个问题吗?

最佳答案

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

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

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

  3. 使用 memset() 用空格填充前 n - len 个字符。


例如,假设您要将字符串 "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;
}

关于c - 在c中的字符串左侧添加空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33666248/

相关文章:

arrays - 在 Ruby 中将数组破坏性地转换为数组

javascript - 如何删除数组中重复对象的两个实例

c - 关于C中头文件位置的帮助

c - 是否有 strsep() 函数的 Windows 变体?

c - 单链表简单数据库

c++ - 数组、 vector 、Boost::arrays

c - 如何在字符串中添加数字? (C)

c++ - g++ L"string~"+ 运算符,类似于 Visual C++

字符串距离,仅换位

c - 如何判断双数的分母是否为奇数?