给定字符串,宽度和输出空字符串的程序将字符串置于输出区域的中心。

时间:2015-04-25 02:37:41

标签: c string

如果格式化成功,则函数返回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;
}

1 个答案:

答案 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()会为我们做到这一点,也许会更有效率。另请注意,我们只需要一个局部变量。您已经使用了四个局部变量来实现这种简单的功能。尽量保持局部变量的数量很少。如果您不能这样做,请拆分该功能。否则,您将无法在两周后阅读自己的代码。从你努力的结果来看,你已经很难立即阅读它。