首页 文章资讯内容详情

在 C++ 中进行子字符串搜索的递归函数

2026-06-02 1 花语

给定两个字符串Str和subStr作为输入。目标是找出subStr中存在的文本是否作为子字符串存在于Str中。如果整个X在Y中至少出现一次,则字符串X称为Y的子串。我们将使用递归方法来做到这一点。

例如

输入 -Str=“nhooo”subStr=“Point”

输出 -给定的字符串不包含子字符串!

说明 -字符串Point不是nhooo的子字符串

输入 -Str=“全球化”subStr=“global”

输出 -给定的字符串包含子字符串!

说明-字符串global是全球化的子字符串

下面程序中使用的方法如下

在这种方法中,我们以递归方式检查subStr是否是Str的子串。递归的步骤将是:-

1.将两个字符串传递给递归函数,其中指针将指向两个字符串的当前字符位置

如果string结束但pattern还剩下更多字符,则返回0作为patternnotfound并且我们到达string的末尾。

如果当前字符是模式中的最后一个字符,则在字符串中找到它,返回1。

如果两个当前字符相同,则将两个指针移动到下一个位置。

如果两个当前字符不匹配,则将字符串指针移动到下一个位置。

将输入字符串作为字符数组Str和subStr。

函数match(char*str1,char*substr1)接受两个子字符串,如果substr1和str1相同,则返回1。

两个指针都指向字符串中存在的字符,最初位于起始位置。

如果substr为空,则返回0。

如果两个字符串都为空,则也返回0。

如果两个当前字符相等,则使用match(str1+1,substr1+1)递归检查下一个字符

函数checksubString(char*str2,char*substr2)接受两个字符串,如果substr2存在于str2中,则返回1。

如果str2和substr2指向的当前字符相同,则使用match()函数检查连续字符是否也匹配。如果返回1,则返回1。

如果到达str2的末尾,则返回0。

否则使用checksubString(str2+1,substr2)递归检查str2的下一个字符;

如果所有条件都失败,则还使用checksubString(str2+1,substr2)递归检查;

根据返回值打印结果。

示例

#include<iostream> using namespace std; int match(char *str1, char *substr1){ if (*substr1 == \0){ return 1; } if (*str1 == \0){ if(*substr1 != \0){ return 0; } } if (*str1 == *substr1){ return match(str1 + 1, substr1 + 1); } return 0; } int checksubString(char *str2, char *substr2){ if (*str2 == *substr2){ if(match(str2, substr2)){ return 1; } } if (*str2 == \0){ return 0; } else{ return checksubString(str2 + 1, substr2); } return checksubString(str2 + 1, substr2); } int main(){ char Str[]="nhooo"; char subStr[]="point"; if(checksubString(Str,subStr)==1){ cout << "给定的字符串包含子字符串!"; } else{ cout << "给定的字符串不包含子字符串!"; } return 0; }输出结果

如果我们运行上面的代码,它将生成以下输出

给定的字符串包含子字符串!