パターン検索用の有限オートマトンアルゴリズム用のC++プログラム
この記事では、パターン検索用の有限オートマトンアルゴリズムを実行するプログラムについて説明します。
テキスト[0...n-1]とパターン[0...m-1]が提供されます。 text[]内のpattern[]のすべての出現を見つける必要があります。
このために、text []を前処理し、それを表す2次元配列を作成します。その後、text[]の要素とオートマトンのさまざまな状態の間を移動する必要があります。
例
#include<stdio.h> #include<string.h> #define total_chars 256 int calc_nextstate(char *pat, int M, int state, int x) { if (state < M && x == pat[state]) return state+1; int ns, i; for (ns = state; ns > 0; ns--) { if (pat[ns-1] == x) { for (i = 0; i < ns-1; i++) if (pat[i] != pat[state-ns+1+i]) break; if (i == ns-1) return ns; } } return 0; } //builds Finite Automata void calc_TF(char *pat, int M, int TF[][total_chars]) { int state, x; for (state = 0; state <= M; ++state) for (x = 0; x < total_chars; ++x) TF[state][x] = calc_nextstate(pat, M, state, x); } //prints all occurrences of pattern in text void calc_occur(char *pat, char *txt) { int M = strlen(pat); int N = strlen(txt); int TF[M+1][total_chars]; calc_TF(pat, M, TF); int i, state=0; for (i = 0; i < N; i++){ state = TF[state][txt[i]]; if (state == M) printf ("\n Given pattern is found at the index%d",i-M+1); } } int main() { char *txt = "AABCDAABBDCAABADAABDABAABA"; char *pat = "AABA"; calc_occur(pat, txt); return 0; }
出力
Given pattern is found at the index 11 Given pattern is found at the index 22
-
配列要素の乗算のためのC++プログラム
整数要素の配列で与えられ、タスクは配列の要素を乗算して表示することです。 例 Input-: arr[]={1,2,3,4,5,6,7} Output-: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 Input-: arr[]={3, 4,6, 2, 7, 8, 4} Output-: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 以下のプログラムで使用されるアプローチは次のとおりです − 一時変数を初期化して、最終結果を1で格納します ループを0からnまで開始します。nは配列のサイズです 最終結果を得るには、tempの値にarr[i]を掛け続
-
C++での8進数から10進数への変換のプログラム
入力として8進数を指定すると、タスクは指定された8進数を10進数に変換することです。 コンピューターの10進数は10進数で表され、8進数は0から7までの8進数で表されますが、10進数は0から9までの任意の数字にすることができます。 8進数を10進数に変換するには、次の手順に従います- 余りから右から左に数字を抽出し、それを0から始まる累乗で乗算し、(桁数)–1まで1ずつ増やします。 8進数から2進数に変換する必要があるため、8進数の基数は8であるため、累乗の基数は8になります。 指定された入力の桁にベースとパワーを掛けて、結果を保存します 乗算されたすべての値を加算して、10進数になる