如果格式化成功,则函数返回1;如果找到任何错误(例如字符串长度大于宽度),则返回0。我收到错误了吗?怎么了?我不认为我也称它为正确......
#include <stdio.h>
int main()
{
int dummy, value = 0;
formatString(value);
scanf_s("%d",&dummy);
return 0;
}
int formatString (char *in,
char *out,
int width)
{
//Local Declarations
int spaces;
char *start;
char *walker;
int value;
spaces = (width – 1) – strlen(in);
if (spaces < 0)
{
value = 0;
}
else
{
start = out + (spaces / 2);
for (walker = out; walker < start; walker++)
*walker = ' ';
strcpy (start, in);
for (walker = out + strlen(out);
walker < out + width – 2;
walker++)
*walker = ' ';
*walker = ‘\0’;
}
return value;
}
答案 0 :(得分:0)
您的代码形象不明,无法识别。你的家庭作业解决方案如下:
int str_center(char *out, int width, char *in)
{
int offset;
// compute and check offset
offset = (width - strlen(in)) / 2;
if (offset < 0)
return -1;
// initialize output buffer
memset(out, ' ', width - 1);
out[width - 1] = '\0';
// write result
memcpy(out + offset, in, strlen(in));
return 0;
}
首先,我们计算将输入字符串复制到输出字符串的偏移量。如果输入字符串严格大于输出字符串,则为负数;在这种情况下,我们将纾困并返回-1。大多数开发人员使用零表示成功而非零表示失败,因为通常只有一种方法可以成功,但数千人会失败。
然后,我们用空格初始化输出缓冲区并使用空终止符正确终止它。
最后,我们使用偏移量将输入字符串写入输出字符串,从所需位置开始。
请注意,我们不需要遍历任何字符串。 memset()
和memcpy()
会为我们做到这一点,也许会更有效率。另请注意,我们只需要一个局部变量。您已经使用了四个局部变量来实现这种简单的功能。尽量保持局部变量的数量很少。如果您不能这样做,请拆分该功能。否则,您将无法在两周后阅读自己的代码。从你努力的结果来看,你已经很难立即阅读它。