假设我有一个char* str = "0123456789",我想剪切第一个和最后三个字母,只打印中间的三个字母,最简单、最安全的方法是什么?
现在的诀窍是:要剪切的部分和要打印的部分的大小是可变的,所以我可以有一个非常长的char*,也可以是一个非常小的char*。
发布于 2008-11-01 23:03:22
您可以使用printf()和特殊格式的字符串:
char *str = "0123456789";
printf("%.6s\n", str + 1);%s转换说明符中的精度指定要打印的最大字符数。您还可以使用变量在运行时指定精度:
int length = 6;
char *str = "0123456789";
printf("%.*s\n", length, str + 1);在本例中,*用于指示下一个参数(length)将包含%s转换的精度,相应的参数必须是int。
指针算法可以用来指定起始位置,就像我上面做的那样。
编辑
还有一点,如果字符串比精度说明符短,则打印的字符将更少,例如:
int length = 10;
char *str = "0123456789";
printf("%.*s\n", length, str + 5);将打印"56789“。如果要始终打印一定数量的字符,请同时指定最小字段宽度和精度:
printf("%10.10s\n", str + 5);或
printf("%*.*s\n", length, length, str + 5);它将打印:
" 56789"您可以使用减号左对齐字段中的输出:
printf("%-10.10s\n", str + 5);最后,最小字段宽度和精度可以不同,即
printf("%8.5s\n", str);将在8个字符的字段中右对齐打印最多5个字符。
发布于 2008-11-01 23:16:16
罗伯特·甘布尔和史蒂夫分别拥有大部分作品。组合成一个整体:
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);
}示例的调用:
print_substring("0123456789", 1, 3);发布于 2008-11-01 23:03:41
如果你不介意修改数据,你可以做一些指针运算。这是假设字符串是一个字符指针而不是一个数组:
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"https://stackoverflow.com/questions/256218
复制相似问题