左边填充文字

时间:2017-01-31 14:48:36

标签: c string padding

TASK:// target - 启动记录结果的参数 目标应该是"来源"左边补充了" fill_char"长度" cnt"。如果cnt小于源的长度,则它变得等于目标源。       //现在正在向右移动,必须改变一些东西,但我不确定是什么以及如何做。你能给我一些建议吗?如果您有不同的决定,请与我分享。谢谢 :)))!

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <batch_util.h>

int lpad(char* target, char* source, char fill_char, int cnt)
{
    int i;
    int source_size = strlen(source);
    for (i = 0; i < source_size; i++)
        target[i] = source[i];
    for (i = source_size; i < cnt; i++)
        target[i] = fill_char;
    target[i] = '\0';
    return 0;
}
int main(int argc, char* argv[])
{
    char source[128];
    char target[128];
    char fill_char;
    int cnt;
    scanf("%s\n", &source);
    scanf("%c\n", &fill_char);
    scanf("%d\n", &cnt);
    lpad(target, source, fill_char, cnt);
    printf("%s\n", target);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

对于初学者,您可以使用标准C字符串函数而不是循环。

看来你的意思是以下

#include <stdio.h>
#include <string.h>

char * lpad( char *target, const char *source, char fill_char, size_t cnt )
{
    size_t source_size = strlen( source );

    if ( source_size < cnt )
    {
        memset( target, fill_char, cnt - source_size );
    }

    strcpy( target + ( source_size < cnt ? cnt - source_size : 0 ), source );

    return target;
}

#define N   16

int main(void) 
{
    char *source= "monkey";
    char target[N];

    puts( lpad( target, source, '*', N - 1 ) );

    return 0;
}

程序输出

*********monkey

至于你的代码,那么该函数不会在左边附加任何内容。