首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C语言打印一部分char[]的最简单方法

用C语言打印一部分char[]的最简单方法
EN

Stack Overflow用户
提问于 2008-11-01 22:59:46
回答 5查看 55.8K关注 0票数 32

假设我有一个char* str = "0123456789",我想剪切第一个和最后三个字母,只打印中间的三个字母,最简单、最安全的方法是什么?

现在的诀窍是:要剪切的部分和要打印的部分的大小是可变的,所以我可以有一个非常长的char*,也可以是一个非常小的char*。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-01 23:03:22

您可以使用printf()和特殊格式的字符串:

代码语言:javascript
复制
char *str = "0123456789";
printf("%.6s\n", str + 1);

%s转换说明符中的精度指定要打印的最大字符数。您还可以使用变量在运行时指定精度:

代码语言:javascript
复制
int length = 6;
char *str = "0123456789";    
printf("%.*s\n", length, str + 1);

在本例中,*用于指示下一个参数(length)将包含%s转换的精度,相应的参数必须是int

指针算法可以用来指定起始位置,就像我上面做的那样。

编辑

还有一点,如果字符串比精度说明符短,则打印的字符将更少,例如:

代码语言:javascript
复制
int length = 10;
char *str = "0123456789";
printf("%.*s\n", length, str + 5);

将打印"56789“。如果要始终打印一定数量的字符,请同时指定最小字段宽度和精度:

代码语言:javascript
复制
printf("%10.10s\n", str + 5);

代码语言:javascript
复制
printf("%*.*s\n", length, length, str + 5);

它将打印:

代码语言:javascript
复制
"     56789"

您可以使用减号左对齐字段中的输出:

代码语言:javascript
复制
printf("%-10.10s\n", str + 5);

最后,最小字段宽度和精度可以不同,即

代码语言:javascript
复制
printf("%8.5s\n", str);

将在8个字符的字段中右对齐打印最多5个字符。

票数 64
EN

Stack Overflow用户

发布于 2008-11-01 23:16:16

罗伯特·甘布尔和史蒂夫分别拥有大部分作品。组合成一个整体:

代码语言:javascript
复制
void print_substring(const char *str, int skip, int tail)
{
    int len = strlen(str);
    assert(skip >= 0);
    assert(tail >= 0 && tail < len);
    assert(len > skip + tail);
    printf("%.*s", len - skip - tail, str + skip);
}

示例的调用:

代码语言:javascript
复制
print_substring("0123456789", 1, 3);
票数 9
EN

Stack Overflow用户

发布于 2008-11-01 23:03:41

如果你不介意修改数据,你可以做一些指针运算。这是假设字符串是一个字符指针而不是一个数组:

代码语言:javascript
复制
char string[] = "0123456789";
char *str = string;

str += 3; // "removes" the first 3 items
str[4] = '\0'; // sets the 5th item to NULL, effectively truncating the string

printf(str); // prints "3456"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/256218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档