C语言入门:查找子串
查找子串:输入两个字符串s和t,在字符串s中查找子串t,输出起始位置,若不存在,则输出-1.要求自定义函数char* search(char * s,char * t)返回子串t的首地址,若未找到,则返回NULL。试编写相应程序。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>char* search(char*s,char*t)
{ int size_t=strlen(t),size_s=strlen(s),T,i,j;char *p=NULL;for(i=0;i<=(size_s-size_t);i++){p=s+i;T=1;for(j=0;j<size_t;j++){if(*p!=*(t+j)){T=0;break;}p++;}if(T==1)break;}if(T==0)return NULL;elsereturn s+i;
}int main()
{char *s,*t,*p,ch;int count,i;while(1) {printf("请输入字符串s:(直接输入回车退出)\n");s=(char *)malloc(sizeof(char)); //这里使用动态输入字符串count=0; //内存足够下可以使字符串字符个数不受数组大小限制while((ch=getchar())!='\n'){s[count]=ch;count++;s=(char *)realloc(s,(count+1)*sizeof(char));}s[count]='\0';if(count==0) //程序结束判断{printf("程序运行结束!\n");break;}while(1) //防止子串输入字符个数超过s的循环{t=(char *)malloc((count+1)*sizeof(char));printf("输入子串t:\n");i=0;while((ch=getchar())!='\n') //循环输入字符来计数{t[i]=ch;i++;}t[i]='\0';if(i>count){printf("子串t串长>s串长,请重新");t=(char *)realloc(t,i*sizeof(char)); //保证内存成功释放,重新分配t内存free(t);}elsebreak;}if((p=search(s,t))!=NULL){printf("起始位置:从第%d个字符开始\n",p-s+1);printf("%s\n\n",p);}elseprintf("-1\n\n"); //题目要求没有找到则输出-1free(s); free(t);}return 0;
}
用了malloc和realloc来实现动态内存分配从而实现输入字符个数不再受数组大小限制(内存足够的话),并且考虑到子串t可能因为超出s的个数而出错做了个容错判断,总体上加了循环实现循环输入并设置了一个退出程序出口。这里所有用动态分配的指针全部都及时释放了,不会因为循环次数的增多而导致内存占用增大。
由于realloc动态分配操作较慢,此程序还可以做优化,比如先开辟10字符的空间,每输入10个字符后再多开辟10字符空间,程序运行速度可以比此程序更快。(但对于这么一点可以忽略不计( ̄▽ ̄)~*)
自定义函数部分使用了从被查找串s第一个字符开始,与t串的字符逐个比较的方法来查找,目前也只能想到了这种查找方法。
结果:
C语言入门:查找子串相关推荐
- c语言字符串查找子串并截取,如何搜索截取特定字符串?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 有如下文本: config KEXEC_CORE bool config OPROFILE tristate "OProfile system ...
- 【东方博宜】1112 - 【入门】查找子串并替换
1112 - [入门]查找子串并替换 题目描述 对输入的一句子实现查找且置换的功能(找到某个子串并换成另一子串). 比如:将"abcf abdabc"中的"abc&quo ...
- 【Python入门教程】第82篇 常用字符串方法之查找子串
本篇我们学习如何利用字符串的 index() 方法和 find() 方法获取字符串中子串的位置. 字符串 index() 方法 字符串的 index() 方法用于返回字符串中指定子串第一次出现的位置. ...
- 《Go语言圣经》学习笔记 第一章 Go语言入门
Go语言圣经学习笔记 第一章 Go语言入门 目录 Hello, World 命令行参数 查找重复的行 GIF动画 获取URL 并发获取多个URL Web服务 本章要点 注:学习<Go语言圣经&g ...
- c 语言 字符 查找,C 语言实例 - 查找字符在字符串中出现的次数
C 语言实例 - 查找字符在字符串中出现的次数 C 语言实例 C 语言实例 查找字符在字符串中的起始位置(索引值从 开始). 实例 #include int main() { char str[], ...
- c语言字符串子串问题,C语言计算字符串子串出现的次数
#include #include int substring(char *str,char *str1);//函数原型 int main(void) { char str[64]={0}; char ...
- 【C/C++语言入门篇】-- 文件操作
[C/C++语言入门篇]-- 文件操作 收藏 此文于2010-03-09被推荐到CSDN首页 如何被推荐? 最近实在是太忙了,这篇整整就推迟了1个月了,实在是对不起.之前本打算这个模块就结束了,文件操 ...
- c 语言 double 除法_这是我的C语言入门笔记
点击上方"C语言中文社区",选择"设为星标★" 技术干货第一时间送达! 来自:大鱼机器人 精彩回顾: [万字长文]C语言高效编程与代码优化,建议收藏![推荐] ...
- 这是我的C语言入门笔记。
c语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...
- c语言圆周率计算_C语言入门这一篇就够了
c语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...
最新文章
- button点击改变颜色_【干货】眉笔颜色要选对,三步教你选择正确眉色
- 合工大计算机研究生毕业工资,合肥工业大学2019届薪酬统计
- zend studio配置php_PHP-Zend Studio PHP环境的搭建
- krc 编辑 linux,Linux网络编程
- SAP License:搽皮鞋的提示
- element table多选表格_element-ui 表格打印
- mysql 中文 转 拼音_MySQL中文转换成拼音的函数
- 【Deepin Debian 系统安装RPD远程桌面工具Remmina】
- 2019年大前端技术趋势深度解读
- 考研杂谈一:计算机专业有必要考研吗?
- Provision not found. A provision is required for deploying your app to the device. 解决方案
- 2019年下半年1+X 证书 Web 前端开发初级理论考试题目原题+答案(超详细分析)
- vb.net如何打包exe安装文件
- 离职总结(2022-9-5)
- 物联网操作系统HelloX V1.85发布公告
- 关于linux的音频驱动
- outlook2007突然打不开的解决方案
- php框架利弊,ThinkPHP框架的优缺点是什么
- 【SEO】从搜索引擎工作过程来分析如何进行搜索引擎优化
- html5 div 拱桥形状制作,新型上承式拱桥的制作方法