5

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

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

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

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

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

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

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

____________

注意:它不一定必须是与 printf 相关的任何内容,但是,它必须很短。

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

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

4

3 回答 3

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可以通过编译器以非常有效的方式实现(即高度优化的汇编代码)。

于 2013-02-22T09:42:42.677 回答
1

如果您不需要i事后的值,则:

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

或者

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

在 22 个字符内完成。如果你i之后确实需要,并且你有一个备用变量j,我发现最短的 using-a-loop 使用 25 个字符:

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

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

r(x){x&&printf("x")&r(--x);}
int main()
{
     int i=12;
     r(i);
}
于 2013-02-22T12:47:25.093 回答
0

如果你对一个特定的字符感兴趣,那就是超级肮脏的把戏

#include <stdio.h>

const char *very_long_single_char_string = "___________________________________";

int main()
{
    int i = 4;

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

}

结果:

____
于 2013-02-22T09:47:06.693 回答