C语言实现全字匹配字符串查找

需积分: 4 1 下载量 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语言,并为解决更复杂的字符串处理问题打下基础。