我正在尝试使用标准字符串排列算法void permute(char arr[], int L, int R, int level)
{
int i = 0;
level = level+1;
if(L == R)
{
printf("%*s", level, "\t");
printf("printing : %s\n", arr);
}
else
{
for(i = L; i <= R; i++)
{
printf("%*s", level, "\t");
printf("swapping %c with %c\n", arr[L], arr[i]);
SWAP(&arr[L], &arr[i]);
permute(arr, L+1, R, level);
printf("%*s", level, "\t");
printf("swapping back %c with %c\n", arr[i], arr[L]);
SWAP(&arr[L], &arr[i]);
}
}
}
int main()
{
char str[] = "abc";
permute(str, 0, 2, 0);
return 0;
}
由于我似乎无法理解它如何回溯,交换字符和置换,我试图在每次递归permute()调用时插入printfs并增加缩进“级别”。无论如何这里是代码:
printf("%*s", level, "\t");
当我们进入更深层次的递归级别时,我想要swapping a with a
swapping b with b
printing : abc
swapping back b with b
swapping b with c
printing : acb
swapping back b with c
swapping back a with a
swapping a with b
swapping a with a
printing : bac
swapping back a with a
swapping a with c
printing : bca
swapping back a with c
swapping back a with b
swapping a with c
swapping b with b
printing : cba
swapping back b with b
swapping b with a
printing : cab
swapping back b with a
swapping back a with c
放置递增选项卡。但这不起作用,我正在通过一个标签移动一个文本块。
(level * '\t')
知道如何让printf插入root@07ff3fbcb3cd:/# libreoffice --version
LibreOffice 5.2.4.2.1 20m0(Build:2)
root@07ff3fbcb3cd:/# libreoffice --headless --convert-to pdf --outdir . rapport.docx
convert /rapport.docx -> /rapport.pdf using filter : writer_pdf_Export
root@07ff3fbcb3cd:/#
标签吗?
答案 0 :(得分:2)
格式字符串中的*
不是重复计数;它是最小字段宽度。如果level
为19,%*s
将打印19个字符,但字符串中只有一个标签,因此它始终只打印一个标签和18个空格。该字符串将是右对齐的(左对齐没有-
标志),因此有18个空格和一个标签。
#include <stdio.h>
int main(void)
{
int level = 19;
printf("[%*s]\n", level, "\t");
return 0;
}
您需要一系列标签,例如"\t\t\t\t\t\t\t\t\t\t\t\t"
,其长度超过您要访问的最深层次。或者你需要一个小函数来缩进适当数量的标签:
static inline void indent(int n)
{
for (int i = 0; i < n; i++)
putchar('\t');
}
并在致电printf()
之前致电。
答案 1 :(得分:1)
您可以使用for循环:例如
for(int j = 0;j<level;j++)
printf("\t");
答案 2 :(得分:0)
最简单的方法:
#include <stdio.h>
int main (void)
{
printf("how i do this\t");
for(int i = 1 ; i <= 9; i++ ) {
printf(" ");
}
printf("gotit");
return 0;
}
根据需要工作。您只需要将第一个标签放在for
部分之前,就可以位于普通标签位置,并且由于一个标签仅用于空格,因此您可以根据需要多次打印4个空格。
别忘了您想要的数量-您之前做过的第一个标签,所以在这里我想将其设置为文本后的第10个位置,因此9次后我停止了循环。例如,如果您想要1000,只需将9
替换为999
。