截取字符串的3种方法

admin 3070 2025-11-12 19:15:13

一、截取字符串的实现

在C语言中,没有直接截取字符串的库函数,但是咱们可以借助其他函数实现这个功能。

1.最简单的方法

如果只是直接输出一个字符串的子串,只需要一个简单的printf函数即可。

#include

int main() {

char s[]="Hello World!";

int n=5;

//从索引s+6开始,输出n个字符

printf("%.*s\n", n, s+6);

return 0;

}

程序输出:World

注:格式化说明符%.*s表示输出*个字符,*的值由后面的变量n指定,这样表示就可以输出不固定的字符个数。完整形式为%m.ns,表示打印字符宽度为m,字符个数为n,如printf("%3.1s\n",s)会输出两个空格1个H。

注意宽度m不是限宽,而是最小宽度。就像停车场上的停车位一样,不是只有m个停车位,而是只画了m个停车位。

也就是说,当nm时,会正常输出n个字符(不会被截断)。这个特性和浮点数的输出宽度和小数位数规律完全一样。

printf("%s", "good")

g

o

o

d

printf("%5s", "good")

g

o

o

d

printf("%.2s", "good")

g

o

printf("%3.2s", "good")

g

o

printf("%4.2s", "good")

g

o

printf("%1.2s", "good")

g

o

2.利用strncpy函数

strncpy定义在 头文件中,功能是将一个字符串(包括终止的空字符)从源字符串复制到目标字符串。与strcpy不同的是,它可以指定复制字符的数量(中间有个字母n就表示要复制n个)。

函数的原型:

char *strncpy(char *dest, const char *src, size_t n);

参数说明:

dest:指向目标字符串的指针,即你要将源字符串复制到的位置。

src:指向源字符串的指针,即你要从中复制字符串的位置。

n:要复制的字符的最大数量。

返回值:

strncpy 函数返回目标字符串 dest 的指针。

代码如下:

#include

#include

void substring(char *src, char *dest, int start, int length) {

if (start < 0 || length <= 0 || start + length > strlen(src)) {

printf("Invalid parameters!\n");

return;

}

// 使用strncpy函数复制子字符串到目标字符串

strncpy(dest, src + start, length);

// 在目标字符串的末尾添加空字符

dest[length] = '\0';

}

int main() {

char src[] = "Hello, World!";

char dest[10];

// 截取从索引7开始的8个字符

substring(src, dest, 7, 5);

printf("%s\n", dest);

return 0;

}

3.自编代码

其实strncpy实现起来非常简单,完全可以自己写,只需要将要截取的元素逐个赋值到目标数组即可。可将上面的那行strncpy代码替换如下:

for(int i=0; i

dest[i]=src[i+start];

}

二、截取字符串的应有案例

搞一个截取字符串的简单应用案例:“名言生成器”。

咱们都知道这样一句名言:

还有一句躺平人的心声:

咱们可以把这两句话进行截取重拼来搞搞新意思,代码如下:

#include

int main() {

char s1[]="生如夏花之绚烂,死如秋叶之静美。";

char s2[]="打工可能累死!玩命可能猝死!躺平最多饿死!";

printf("%.26s", s1);

printf("%.4s。\n", s2+28);

return 0;

}

猜猜会输出什么结果?

注:实际测试,一个中文字符相当于两个英文字符,所以格式化输出时参数值相对于纯英文要翻倍。

当然了,这只是个最简单的应用案例。如果我们从大量的名人名言中随机截取片段,然后将它们重新组合成全新的句子,在有人工智能算法的加持下,就可能产生一些非常好玩的句子。

上一篇
下一篇
相关文章