在C语言中打印格式化的字符串

4

我有一个长度为10的字符串。 我想要打印第4-6个字母(包括两端),并且我想将输出跨越特定长度L,数字放在右侧。

例如

如果我的原始字符串是123456789,则以下代码应以以下方式显示。

printf(Original);
printf(from 4-6, over 5 spaces)

输出:

123456789
  456

这是将数字456分散在5个空格中,并向右缩进。

我如何在C语言中实现它?

编辑1:如果我的宽度不是固定的,而是由变量决定的。同样,子字符串的长度也是一个变量。现在有什么方法可以做到这一点吗?

我可以做类似于

printf("%%d.%ds",width,precision,expression);

将整数分割成特定的数组,然后打印任何你喜欢的数组索引。 - Ishmeet
2个回答

7

非常直接:

printf("%5.3s\n", Original + 4);
         ^ ^
         | |
         | +--- precision, causes only 3 characters to be printed
         |
         +----- field width, sets total width of printed item

由于默认是右对齐,因此您可以获得所需的输出。

精度“节省”了我们将这三个字符提取到一个适当终止的字符串中的麻烦,非常方便。

您可以通过将宽度指定为*并传递int参数来使用动态值作为精度或字段宽度(或两者都使用):

const int width = 5, precision = 3;
printf("%*.*s\n", width, precision, Original + 4);

谢谢,比如说我的字段宽度不是固定的,有什么方法可以将其纳入考虑?也就是说,如果我有一个名为“width”的变量,它告诉我整体宽度。 - Kraken
谢谢,我想到了 printf("%\%d.\%ds",expression); 这个在这里行不通,对吧? - Kraken
刚才不是有个类似的问题吗,只不过用了不同的方式表达吗? - 0decimal0

5
#include <stdio.h>

int main(void)
{
    char *original = "123456789";

    printf("%5.3s\n", original + 3);
    return 0;
}

编辑:

如果你想基于变量获得精度:

int prec = 2;

printf("%5.*s\n", prec, original + 3);

对于宽度也是一样的


我猜原始文本加3会从第4个字符开始,这使其在第6个字符处停止? - Kraken
1
3在%5.3s中表示精度(最多可打印的字符数)。 - David Ranieri
@DavidRF,如果您能够对问题进行编辑并添加到答案中,那就太好了。 - Kraken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接