查找子串:输入两个字符串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语言入门:查找子串相关推荐

  1. c语言字符串查找子串并截取,如何搜索截取特定字符串?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 有如下文本: config KEXEC_CORE bool config OPROFILE tristate "OProfile system ...

  2. 【东方博宜】1112 - 【入门】查找子串并替换

    1112 - [入门]查找子串并替换 题目描述 对输入的一句子实现查找且置换的功能(找到某个子串并换成另一子串). 比如:将"abcf abdabc"中的"abc&quo ...

  3. 【Python入门教程】第82篇 常用字符串方法之查找子串

    本篇我们学习如何利用字符串的 index() 方法和 find() 方法获取字符串中子串的位置. 字符串 index() 方法 字符串的 index() 方法用于返回字符串中指定子串第一次出现的位置. ...

  4. 《Go语言圣经》学习笔记 第一章 Go语言入门

    Go语言圣经学习笔记 第一章 Go语言入门 目录 Hello, World 命令行参数 查找重复的行 GIF动画 获取URL 并发获取多个URL Web服务 本章要点 注:学习<Go语言圣经&g ...

  5. c 语言 字符 查找,C 语言实例 - 查找字符在字符串中出现的次数

    C 语言实例 - 查找字符在字符串中出现的次数 C 语言实例 C 语言实例 查找字符在字符串中的起始位置(索引值从 开始). 实例 #include int main() { char str[], ...

  6. c语言字符串子串问题,C语言计算字符串子串出现的次数

    #include #include int substring(char *str,char *str1);//函数原型 int main(void) { char str[64]={0}; char ...

  7. 【C/C++语言入门篇】-- 文件操作

    [C/C++语言入门篇]-- 文件操作 收藏 此文于2010-03-09被推荐到CSDN首页 如何被推荐? 最近实在是太忙了,这篇整整就推迟了1个月了,实在是对不起.之前本打算这个模块就结束了,文件操 ...

  8. c 语言 double 除法_这是我的C语言入门笔记

    点击上方"C语言中文社区",选择"设为星标★" 技术干货第一时间送达! 来自:大鱼机器人 精彩回顾: [万字长文]C语言高效编程与代码优化,建议收藏![推荐] ...

  9. 这是我的C语言入门笔记。

    c语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...

  10. c语言圆周率计算_C语言入门这一篇就够了

    c语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...

最新文章

  1. button点击改变颜色_【干货】眉笔颜色要选对,三步教你选择正确眉色
  2. 合工大计算机研究生毕业工资,合肥工业大学2019届薪酬统计
  3. zend studio配置php_PHP-Zend Studio PHP环境的搭建
  4. krc 编辑 linux,Linux网络编程
  5. SAP License:搽皮鞋的提示
  6. element table多选表格_element-ui 表格打印
  7. mysql 中文 转 拼音_MySQL中文转换成拼音的函数
  8. 【Deepin Debian 系统安装RPD远程桌面工具Remmina】
  9. 2019年大前端技术趋势深度解读
  10. 考研杂谈一:计算机专业有必要考研吗?
  11. Provision not found. A provision is required for deploying your app to the device. 解决方案
  12. 2019年下半年1+X 证书 Web 前端开发初级理论考试题目原题+答案(超详细分析)
  13. vb.net如何打包exe安装文件
  14. 离职总结(2022-9-5)
  15. 物联网操作系统HelloX V1.85发布公告
  16. 关于linux的音频驱动
  17. outlook2007突然打不开的解决方案
  18. php框架利弊,ThinkPHP框架的优缺点是什么
  19. 【SEO】从搜索引擎工作过程来分析如何进行搜索引擎优化
  20. html5 div 拱桥形状制作,新型上承式拱桥的制作方法

热门文章

  1. VT是什么?怎么打开教程
  2. rdlc和rdl的区别
  3. Autorun风暴专杀工具
  4. 电脑如何防蹭网?使用防蹭网功能杜绝未知设备连接WiFi
  5. xps13蓝牙消失,设备管理器中出现“未知USB设备(设备描述符请求失败)”的问题
  6. 在线招聘风起,周伯通怎么玩社区招聘?
  7. 当前安全设置不允许下载该文件的原因以及图文解决办法
  8. centos离线安装(升级)nvidia显卡驱动及cuda10.2
  9. css实现烟雾效果(css制作汽车尾气排放效果)
  10. CentOS 6.5 安装Redis并设置开机自启动