パターン検索用の有限オートマトンアルゴリズム用の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進数になる