在 C++ 中进行子字符串搜索的递归函数
给定两个字符串 Str 和 subStr 作为输入。目标是找出 subStr 中存在的文本是否作为子字符串存在于 Str 中。如果整个 X 在 Y 中至少出现一次,则字符串 X 称为 Y 的子串。我们将使用递归方法来做到这一点。
例如
输入 - Str = “nhooo” subStr = “Point”
输出 - 给定的字符串不包含子字符串!
说明 - 字符串 Point 不是 nhooo 的子字符串
输入 - Str = “全球化” subStr = “global”
输出 - 给定的字符串包含子字符串!
说明- 字符串 global 是全球化的子字符串
下面程序中使用的方法如下
在这种方法中,我们以递归方式检查 subStr 是否是 Str 的子串。递归的步骤将是:-
1. 将两个字符串传递给递归函数,其中指针将指向两个字符串的当前字符位置
如果 string 结束但 pattern 还剩下更多字符,则返回 0 作为 pattern not found 并且我们到达 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;
}
如果我们运行上面的代码,它将生成以下输出
给定的字符串包含子字符串!
以上是 在 C++ 中进行子字符串搜索的递归函数 的全部内容, 来源链接: utcz.com/z/358250.html