4

所以我有一个长度为 10 的字符串。我想打印 4-6 [包括两者]的字母,并且我想将输出跨越特定长度 L,数字放在右侧。

例如

如果我有原始 String 123456789,那么下面的代码应该以后续方式显示。

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

输出:

123456789
  456

即 456 分布在 5 个空格上并向右缩进。

我如何在 C 中做到这一点?

编辑1:如果我的宽度不是恒定的,并且我有一个变量,它决定了宽度。同样对于子串的长度也是一个变量。现在有什么办法吗?

我可以做类似的事情吗

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

2 回答 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);
于 2013-07-10T09:42:19.053 回答
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);

...宽度相同

于 2013-07-10T09:43:21.090 回答