在C中以最短的字符数重复并打印一个字符

时间:2013-02-22 09:35:49

标签: c

目前,我试图以尽可能少的字符重复单个字符。例如,我实际上使用类似的东西来重复一系列空格:

printf("%*s",i,"");

我想知道在C中是否有类似的,甚至更短/不同的方式来重复字符串并将其打印出来,就像空格一样。

如果可能,我想要类似的东西:

printf("%*s",i,"_");

然而,据我所知,这是不可能的,无论对我来说是多么理想。

为了澄清,在这些例子中,参数i表示我希望字符重复的次数,即第二个例子应该输出(如果我说的话,12):

____________

NB:它不一定是与printf有关的任何东西,但是,它确实必须很短。

基本上,我想重复一个指定次数的字符,然后输出它。

编辑:我目前正在使用for循环,它允许我31个字符,但是通过使用类似于上面的方法,由于程序的结构方式,我可以删除另外7个字符。所以循环并不是很理想。

3 个答案:

答案 0 :(得分:2)

您可以使用memset

void * memset ( void * ptr, int value, size_t num );
// Fill block of memory
// Sets the first num bytes of the block of memory pointed by ptr to the specified value
// (interpreted as an unsigned char).

所以你会这样做,假设dest是你的目的地字符串:

memset(dest, '_', 12);
编辑:这是一个非常“原始”的解决方案。它不会在字符串的末尾加上'\ 0',所以如果你希望你的字符串只包含重复的字符并以标准方式格式化,你也必须处理它。你当然必须处理这样一个事实,即12可能比分配给dest的空间大。

最后一件事:使用memset可能比使用自己的循环更有效,因为memset可以由编译器以非常有效的方式实现(即,高度 - 优化的汇编代码)。

答案 1 :(得分:1)

如果您之后不需要值i,请:

for(;i--;printf("x"));

while(i--)printf("x");

用22个字符做。如果之后确实需要i,并且你有一个备用变量j,我发现最短的使用循环使用了25个字符:

for(j=i;j--;printf("x"));

使用函数我能做的最好的是函数的28个字符+每个调用的5个字符:

r(x){x&&printf("x")&r(--x);}
int main()
{
     int i=12;
     r(i);
}

答案 2 :(得分:0)

如果你对一个特定的char感兴趣,那就是超级肮脏的技巧

#include <stdio.h>

const char *very_long_single_char_string = "___________________________________";

int main()
{
    int i = 4;

    printf("%.*s",i, very_long_single_char_string);

}

结果:

____