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