<分区>
如何编写一个函数来在字符串的左端添加额外的空格,使其至少长度为 n。如果字符串已经是 n 个字符或更长,则不应更改字符串。
假设原型(prototype)是:
void padLeft(char a[], int n);
有人可以帮我解决这个问题吗?
<分区>
如何编写一个函数来在字符串的左端添加额外的空格,使其至少长度为 n。如果字符串已经是 n 个字符或更长,则不应更改字符串。
假设原型(prototype)是:
void padLeft(char a[], int n);
有人可以帮我解决这个问题吗?
最佳答案
假设您打算在相对较低的级别对其进行编码,您可以按照以下步骤操作。
用strlen()
获取当前长度,调用这个len
。如果它已经至少 n
个字符长,则返回。
使用memmove()
从str[0]
复制到str[n - len]
(对于 len + 1
字节)。 memmove()
函数与 strcpy()
不同,它可以正确处理重叠。
使用 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/