2013-07-10 119 views
4

所以我有一个长度为10的字符串。我想打印来自4-6 [包括两个]的字母,我想跨越特定长度L的输出,数字是放置在右侧。打印C格式的字符串

对于例如

如果我有原始字符串123456789,然后将下面的代码应在随后的方式来显示。

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

输出:

123456789 
    456 

即456分布在5个空格和缩进的权利。

如何在C中执行此操作?

编辑1:如果我的宽度不是恒定的,并且我有一个变量,指示宽度。类似的,子字符串的长度是一个变量。现在有什么办法呢?

我可以这样做

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

将整数分成特定的数组,然后打印您喜欢的数组索引。 – Ishmeet

回答

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); 
+0

感谢你的说,例如我的领域的宽度不是恒定的,我可以合并的任何方式?这是如果我有'宽度'变量,这告诉我的整体宽度。 – Kraken

+0

添加到编辑中。 – Kraken

+0

@Kraken更新了答案。 – unwind

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); 

...宽度相同

+0

我想原来加3会从4开始,这是什么让它停在6? – Kraken

+1

3%%5.3s是精度(最大字符要打印) –

+0

@DavidRF编辑问题,如果你可以添加到答案? – Kraken