C语言实现全字匹配字符串查找
需积分: 4 93 浏览量
更新于2024-09-10
收藏 65KB DOC 举报
"C语言教材学习,涉及字符串查找和递归函数的应用"
在C语言中,字符串处理是一项重要的技能。在给定的代码示例中,有两个不同的方法来解决在字符串中查找子串的问题。这两个方法都涉及到遍历字符串并进行比较,但它们的实现方式略有不同。
第一个方法是由用户“小何善”提供的。这个程序寻找字符串`str1`中所有出现`str2`的位置。主要逻辑是使用两个嵌套循环,外层循环遍历`str1`,内层循环用于比较`str2`的每个字符。当找到匹配的子串时,程序会记录下匹配的起始位置。如果在比较过程中遇到不匹配的字符,内层循环会立即结束,外层循环会回溯到比较之前的位置。最后,程序会输出找到的子串数量及其在`str1`中的位置。
```c
#include "stdio.h"
#include "string.h"
void main() {
char* str1 = "nayitianzhidaoanzd";
char* str2 = "anz";
int index[20];
int num = 0;
int i, j;
// 主要逻辑
for (i = 0; i < strlen(str1) - 3; i++) {
for (j = 0; j < 3; j++) {
if (*(str1 + i) == *(str2 + j)) { // 比较
i++; // str1移到下一位
if (j == 2) { // 如果比较了三次都相等则找到一个
index[num] = i - 2; // 记录str1下标
num++;
}
} else {
i = i - j; // 有不相等的跳出,i回到比较前的值
break;
}
}
}
printf("共找到:%d个\n", num);
printf("下标分别是:");
for (i = 0; i < num; i++) {
printf("\t%d", index[i]);
}
getchar();
}
```
第二个方法是通过递归函数实现的,由“热心问友”提供。这个程序不仅查找子串,而且还能处理子串插入后的新字符串,以便找出所有可能的插入位置。它首先定义了一个名为`str_cmp`的函数,用于比较两个字符串是否相等。然后,`f`函数递归地查找并打印出所有可能的子串插入点。这个方法更复杂,适用于需要生成所有可能组合的情况。
```c
int str_cmp(int n, char *a, char *b) {
int i;
for (i = 0; i < n; i++)
if (a[i] != b[i])
return 0;
return 1;
}
void f(int n, char *a, char *b) {
int i, j;
char m[100];
// 主要逻辑
for (i = n; i < strlen(a); i++) {
for (j = 0; j <= i; j++)
m[j] = a[j];
m[j] = 0;
strcat(m, b);
if (str_cmp(strlen(m), a, m)) {
puts(m);
printf("%d\n", i + strlen(b) + 1);
f(m - a + 1, a, b);
}
}
}
main() {
char* str1 = "nayitianzh";
// ... 其他操作
}
```
这两种方法各有特点,适用于不同的场景。在实际编程中,理解字符串操作和递归函数的概念是非常关键的。学习这些基础知识将有助于深入理解C语言,并为解决更复杂的字符串处理问题打下基础。
2010-06-27 上传
2010-05-09 上传
2009-05-28 上传
2012-10-07 上传
2008-06-07 上传
2013-07-10 上传
cqyck10291211
- 粉丝: 0
- 资源: 2
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程