【问题标题】:Left padded text [closed]左填充文本[关闭]
【发布时间】:2017-06-17 01:28:06
【问题描述】:

TASK: // 目标 - 开始记录结果的参数 目标应该是一个“源”,以“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;
}

【问题讨论】:

  • 你能 a) 正确格式化代码(缺少缩进,随机反引号 /enter code here) b) 修复它以便编译? (lpad 函数没有右括号)。
  • 看起来很可疑,这应该是 C,而不是 C++?
  • 是的,但是 source、cnt 和 char 必须由用户输入我的程序运行正常,但正在向右移动源等等cnt 会看起来像这只猴子**********,答案一定是**********猴子..

标签: c string padding


【解决方案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

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

【讨论】:

  • 是的,但是 source、cnt 和 char 必须由用户输入我的程序运行正常,但正在向右移动源等等cnt 会看起来像这只猴子**********,答案一定是**********猴子..谢谢
猜你喜欢
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 2014-10-12
  • 2016-01-16
相关资源
最近更新 更多