截取字符串的3种方法

一、截取字符串的实现

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

1.最简单的方法

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

#include <stdio.h>
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个停车位。

也就是说,当n<m时,前面补空格,当n>m时,会正常输出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定义在 <string.h> 头文件中,功能是将一个字符串(包括终止的空字符)从源字符串复制到目标字符串。与strcpy不同的是,它可以指定复制字符的数量(中间有个字母n就表示要复制n个)。

函数的原型:

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

参数说明:

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

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

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

返回值:

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

代码如下:

#include <stdio.h>
#include <string.h>
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<length; i++){dest[i]=src[i+start];
}

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

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

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

还有一句躺平人的心声:

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

#include <stdio.h>
int main() {char s1[]="生如夏花之绚烂,死如秋叶之静美。";char s2[]="打工可能累死!玩命可能猝死!躺平最多饿死!";printf("%.26s", s1);printf("%.4s。\n", s2+28);return 0;
}

猜猜会输出什么结果?

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/671541.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI预测体彩排3第3套算法实战化赚米验证第1弹2024年5月5日第1次测试

从今天开始&#xff0c;准备启用第3套算法&#xff0c;来验证下本算法的可行性。因为本算法通过近三十期的内测&#xff08;内测版没有公开预测结果&#xff09;&#xff0c;发现本算法的预测结果优于其他所有算法的效果。彩票预测只有实战才能检验是否有效&#xff0c;只有真正…

裁员为什么先裁技术人员?

最近这个问题比较火&#xff0c;我分享一个印象深刻的答案&#xff1a;楼盖完了&#xff0c;还需要搬砖的吗&#xff1f; 这个答案让我对互联网/程序员这个行业/职业有了新的认识。 房地产是在现实世界里盖房子&#xff0c;互联网是在虚拟世界里盖房子&#xff0c;只不过互联网…

python爬虫(一)之 抓取极氪网站汽车文章

极氪汽车文章爬虫 闲来没事&#xff0c;将极氪网站的汽车文章吃干抹尽&#xff0c;全部抓取到本地&#xff0c;还是有点小小的难度。不能抓取太快&#xff0c;太快容易被封禁IP&#xff0c;不过就算被封了问题也不大&#xff0c;大不了重启路由器&#xff0c;然后你的IP里面又…

ADS基础教程9-理想模型和厂商模型实现及对比

目录 一、概要二、厂商库使用1.新建cell2.调用厂商库中元器件3.元器件替换及参数选择4.完成参数选择5.导入子图 三、仿真实现注意事项 一、概要 本文将介绍在ADS中调用厂商提供的库&#xff0c;来进行原理图仿真&#xff0c;并实现与ADS系统提供的理想元器件之间的比较。 二、…

WhisperCLI-本地部署语音识别系统;Mis开源LLM推理平台;Dokploy-开源版Vercel;Mem-大规模知识图谱

1. Whisper-cli&#xff1a;可本地部署的开源语音识别系统 近日&#xff0c;Ruff的开发团队发布了一款名为Whisper cpp cli的全新语音识别系统&#xff0c;该系统已在GitHub Repo上开源。这是一款完全自主研发的语音转文字系统&#xff0c;基于Whisper技术构建。Ruff团队一直以…

公网tcp转流

之前做过几次公网推流的尝试, 今天试了UDP推到公网, 再用TCP从公网拉下来, 发现不行, 就直接改用TCP转TCP了. 中间中转使用的python脚本, 感谢GPT提供技术支持: import socket import threadingdef tcp_receiver(port, forward_queue):"""接收TCP数据并将其放入…

后端接口返回二进制数据流,前端如何将其转换成对应的excel、csv和json文件格式并下载

本文主要是介绍在工作中遇到的后端接口返回一个二进制数据流&#xff0c;前端在界面上创建下载按钮并下载成对应格式的文件导出。 downloadData({start: startTime,end: endTime,exportType: 0, // 0-excel, 1-csv, 2-json }).then((res) > {download(res, startTime, endTi…

Ansible的安装与基础命令的使用

Ansible Ansible 是一个开源的自动化工具&#xff0c;用于配置管理、应用部署和任务自动化。它由 Michael DeHaan 于 2012 年创建&#xff0c;后来被 Red Hat 收购。Ansible 的设计理念是简单易用&#xff0c;不需要在受管节点上安装任何代理软件&#xff0c;它通过 SSH&#…

牛客热题:单链表排序

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;单链表排序题目链接方法一&…

软件测试与管理-白盒测试-逻辑覆盖法例题

目录 知识点&#xff1a; 例题 &#xff1a; 知识点&#xff1a; 语句覆盖&#xff1a;设计足够多的测试用例&#xff0c;使得被测试程序中的“ 每条可执行语句至少被执行一次” 优点&#xff1a;可通过源码观察直观地得到测试用例&#xff0c;无须细分每个判定表达式。缺点&am…

C++例题:大数运算---字符串相加(使用数字字符串来模拟竖式计算)

1.代码速览 class Solution2 { public:string addStrings(string num1, string num2){//end1和end1是下标int end1 num1.size() - 1;int end2 num2.size() - 1;string str;//下标(指针)从后向前走,走到头才可以结束,所以是end>0int next 0;while (end1 > 0 || end2 &…

添加自定义内容致远oa门户

修改门户内容 甲方需要再主页添加按钮&#xff0c;其实也是可以的&#xff0c;这个配置还不好搞&#xff0c;在后端进行了配置开发