C++ の部分文字列検索のための再帰関数
给定两个字符串 Str 和 subStr 作为输入。目标是确定 subStr 中存在的文本是否作为子字符串存在于 Str 中。如果整个 X 在 Y 中至少出现一次,则字符串 X 称为 Y 的子串。 我们将使用递归方法来执行此操作。
例如
输入− Str = “tutorialspoint” subStr=”Point”
输出− 给定字符串不包含子字符串!解释− 字符串 Point 不是教程点的子字符串
输入− Str = “globalization” subStr=”global”
输出− 给定字符串包含子字符串!
解释 - 字符串global是全球化的子字符串
下面的程序中使用的方法如下
在这种方法中,我们以递归方式检查subStr是否是Str的子字符串。递归的步骤为:-
1.将两个字符串传递给递归函数,其中指针将指向两个字符串的当前字符位置
如果字符串结束但模式还剩下更多字符,则返回 0,因为未找到模式我们到达了字符串的末尾。
-
如果当前字符是模式中的最后一个字符,则在字符串中找到它,返回 1。
li> 如果两个当前字符相同,则将两个指针移动到下一个位置。
如果两个当前字符不匹配,则将指针移动到下一个位置。将字符串移动到下一个位置。
将输入字符串作为字符数组 Str 和 subStr。
函数 match(char *str1, char *substr1) 接受两个子字符串,如果 substr1 和 str1 相同,则返回 1。
两个指针都指向字符串中存在的字符,最初位于起始位置。
如果 substr 为空,则返回 0。
如果两个字符串都为空,则也返回 0。
如果两个字符串都为空,则也返回 0。 >
如果两个当前字符相等,则使用 match(str1 + 1, substr1 + 1) 递归检查下一个字符
函数 checksubString (char *str2, char *substr2) 接受两个字符串,如果 str2 中存在 substr2,则返回 1。
如果 str2 和 substr2 指向的当前字符相同,则检查是否连续的字符也可以使用 match() 函数进行匹配。如果返回 1,则返回 1。
如果到达 str2 的末尾,则返回 0。
否则递归检查str2 的下一个字符使用 checksubString(str2 + 1, substr2);
如果所有条件都失败,则还使用递归检查 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[]="tutorialspoint"; char subStr[]="point"; if(checksubString(Str,subStr)==1){ cout << "Given string contains substring!"; } else{ cout << "Given string does not contain substring!"; } return 0; }
输出
如果我们运行上面的代码,它将生成以下输出
Given string contains substring!
以上がC++ の部分文字列検索のための再帰関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Go 言語は、クロージャとリフレクションという 2 つの動的関数作成テクノロジを提供します。クロージャを使用すると、クロージャ スコープ内の変数にアクセスでき、リフレクションでは FuncOf 関数を使用して新しい関数を作成できます。これらのテクノロジーは、HTTP ルーターのカスタマイズ、高度にカスタマイズ可能なシステムの実装、プラグイン可能なコンポーネントの構築に役立ちます。

C++ 関数の名前付けでは、読みやすさを向上させ、エラーを減らし、リファクタリングを容易にするために、パラメーターの順序を考慮することが重要です。一般的なパラメータの順序規則には、アクション-オブジェクト、オブジェクト-アクション、意味論的な意味、および標準ライブラリへの準拠が含まれます。最適な順序は、関数の目的、パラメーターの種類、潜在的な混乱、および言語規約によって異なります。

効率的で保守しやすい Java 関数を作成するための鍵は、シンプルに保つことです。意味のある名前を付けてください。特殊な状況に対処します。適切な可視性を使用してください。

1. SUM 関数は、列またはセルのグループ内の数値を合計するために使用されます (例: =SUM(A1:J10))。 2. AVERAGE 関数は、列またはセルのグループ内の数値の平均を計算するために使用されます (例: =AVERAGE(A1:A10))。 3. COUNT 関数。列またはセルのグループ内の数値またはテキストの数をカウントするために使用されます。例: =COUNT(A1:A10)。 4. IF 関数。指定された条件に基づいて論理的な判断を行い、結果を返すために使用されます。対応する結果。

再帰関数は、文字列処理の問題を解決するためにそれ自体を繰り返し呼び出す手法です。無限再帰を防ぐために終了条件が必要です。再帰は、文字列の反転や回文チェックなどの操作で広く使用されています。

再帰は、問題を解決するために関数自体を呼び出すことを可能にする強力な手法です。C++ では、再帰関数は、基本ケース (再帰をいつ停止するかを決定する) と再帰呼び出し (問題を分割する) という 2 つの重要な要素で構成されます。より小さなサブ問題)。基本を理解し、階乗計算、フィボナッチ数列、バイナリ ツリー トラバーサルなどの実践的な例を練習することで、再帰的な直感を構築し、自信を持ってコードで使用することができます。

再帰は関数がそれ自体を呼び出す手法ですが、スタック オーバーフローや非効率という欠点があります。代替案には、コンパイラがループへの再帰呼び出しを最適化する末尾再帰最適化、再帰の代わりにループとコルーチンを使用する反復、再帰動作をシミュレートする実行の一時停止と再開が含まれます。

末尾再帰最適化 (TRO) は、特定の再帰呼び出しの効率を向上させます。末尾再帰呼び出しをジャンプ命令に変換し、コンテキスト状態をスタックではなくレジスターに保存することで、余分な呼び出しとスタックへの戻り操作を排除し、アルゴリズムの効率を向上させます。 TRO を使用すると、末尾再帰関数 (階乗計算など) を最適化できます。末尾再帰呼び出しを goto ステートメントに置き換えることで、コンパイラーは goto ジャンプを TRO に変換し、再帰アルゴリズムの実行を最適化します。
