簡単に言えば、4.3 節でやったように 文字列を 1 文字ずつの配列に展開し、 それを先頭から比較していけばいいのですが、 その前に、関数の仕様について、もう少し細かく検討しておきます。
の長さ (= とします) と の長さ (= とします) が等しいときはそれでいいのですが、 違うときも考えておく必要があります。
例えば、単純に 1 番目から 番目までの比較しかしないのだとすると で、1 番目から 番目までは全く同じだけど、 その後に余計な文字列がついている、という場合もありえます。 それはタイプ練習ソフトとしては正解とはいい難いと思います。よって、
すなわち、文字列の短い方に合わせて比較し、そこまでの違い (= diff) と、 その余りの分、つまり と の差 () とを足したものを 返せばいいことになります。
よって、おおまかには次のような関数を作ればいいことになります。
function check(s1,s2, h1,h2,N1,N2,N,L,j,diff) { # s1 を配列 h1 に展開 (N1 がその長さ) # s2 を配列 h2 に展開 (N2 がその長さ) # N = N1 と N2 の小さい方 # L = N1 と N2 の差 (=|N1-N2|) for(j=1;j<=N;j++) if(h1[j]!=h2[j]) diff++ return diff+L }C 言語同様、
!=
は「等しくない」ことを表します。
diff は局所変数で、明示的に初期化しなければ 0 と初期化されますから、
この for 文で、短い方に合わせての比較が行えることになります。
最初の配列に展開する部分は、4.3 節で説明したように、
N1=split(s1,h1,"")とすれば済みますし、 と も、
N2=split(s2,h2,"")
if(N1<=N2) N=N1; L=N2-N1で設定できます。
else N=N2; L=N1-N2