c - 左填充文本

标签 c string padding

<分区>

TASK://target - 开始一个记录结果的参数 target 应该是一个“source”,加上“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;
}

最佳答案

对于初学者,您可以使用标准 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

至于您的代码,该函数不会在左侧附加任何内容。

关于c - 左填充文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41960486/

相关文章:

c - gdb打印双指针

c - Dev C++中for循环(C语言)出错

swift - 为什么 swift 字符串中的 "\n"在稍微不同的情况下表现不同?

chrome 中的 css 填充问题(但 firefox 中没有)

仅在 Chrome 和 Safari 中存在 CSS 边距问题

c - 如何在 Linux 中列出事件端口和使用它们的进程,C 代码

c - 为什么这个 MPI 代码执行无序?

string - 如何加速替换字符串中某些字符的 'divide and conquer' XSLT 模板?

string - MATLAB:将字符转换为自定义设置数字并返回的最快方法

c++: 实现 write_padding 函数