C++实现子串查找算法
需积分: 10 185 浏览量
更新于2024-09-14
收藏 1KB TXT 举报
该资源包含了两个查找子串的C语言程序示例,以及一个获取用户输入字符串的函数和一个将字符串转换为浮点数的函数。这些代码适用于初学者学习和理解基本的字符串操作。
首先,让我们详细分析第一个查找子串的程序(简称程序1):
```c
// 该程序采用KMP算法查找子串
#include<stdio.h>
void main()
{
char *s="abcdefghijk", *t="def";
int i, j, k, m = -1;
for(i=0; s[i]!='\0'; i++)
{
k = i;
for(j=0; t[j]!='\0'&&s[k]!='\0'&&s[k++]==t[j]; j++);
if(t[j]=='\0')
{
m = i;
break;
}
}
printf("%d\n", m); // 如果未找到子串,返回-1
}
```
程序1使用了KMP(Knuth-Morris-Pratt)算法,它在主串`s`中查找子串`t`。KMP算法的特点是避免了不必要的字符比较,当匹配失败时,可以利用已知的匹配信息快速跳过部分主串。在这里,变量`k`保存了子串的当前位置,变量`i`表示主串的当前位置。内部的`for`循环用于比较子串和主串,如果匹配成功,`j`会增加,直到子串结束或不匹配发生。若子串`t`完全匹配,`m`会被更新为主串中子串开始的位置,并退出循环。
第二个查找子串的程序(简称程序2):
```c
// 该程序采用朴素的线性搜索方法查找子串
#include<stdio.h>
void main()
{
char *s="abcdefghijk", *t="def";
int i=0, j=0, m=0;
while(s[i]!='\0'&&t[j]!='\0')
{
if(s[i]==t[j])
{
i++;
j++;
}
else
{
m++;
i = m;
j = 0;
}
}
if(t[j]!='\0')
m = -1;
printf("%d\n", m);
}
```
程序2使用了朴素的线性搜索方法,逐个比较主串`s`和子串`t`的字符。当字符匹配时,`i`和`j`都递增;当不匹配时,`i`向后移动一位,`j`重置回0,继续比较。如果遍历完子串但未找到匹配,返回-1。
接下来是获取用户输入字符串的函数`getlinestr()`:
```c
#include<stdio.h>
char* getlinestr()
{
char x, *p, *pok;
int len=0;
x=getchar();
p=new char('\0');
while(x!='\n')
{
len++;
pok=new char[len+1];
strcpy(pok,p);
pok[len-1]=x;
pok[len]='\0';
delete[] p;
p=pok;
x=getchar();
}
return pok;
}
```
`getlinestr()`函数用于从标准输入读取一行字符,直到遇到换行符`\n`为止。使用动态内存分配创建一个新的字符串`pok`来存储输入,每次读取一个字符,都会更新字符串的长度并重新分配内存。
最后,是将字符串转换为浮点数的函数`strtof()`:
```c
// 仅显示函数声明,具体实现通常由C++库提供
double strtof(char *p);
```
`strtof()`函数通常用于将表示浮点数的字符串转换为对应的浮点数值。在C++中,这个功能由标准库提供,不需要自行编写。
总结:这个资源提供了C语言中的字符串处理示例,包括使用KMP算法查找子串、朴素线性搜索查找子串、从标准输入获取字符串以及将字符串转换为浮点数的基本方法,对于学习C/C++语言的初学者来说非常有帮助。
点击了解资源详情
2023-11-19 上传
2023-05-28 上传
2023-06-01 上传
2023-06-07 上传
2023-06-13 上传
爱至死不渝
- 粉丝: 0
- 资源: 10
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦