C语言实现全字匹配字符串查找
需积分: 4 9 浏览量
更新于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语言,并为解决更复杂的字符串处理问题打下基础。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2012-10-07 上传
2013-07-10 上传
2008-06-07 上传
cqyck10291211
- 粉丝: 0
- 资源: 2