投稿
ヨッシー okkun2002
文字列を5文字ずつみていって、完全一致した回数が一番多い文字を探す方法はどうするんでしょうか?例えば、「ABCDABCDAACD」という文字列があった場合「ABCD」が2で「AACD」が1という感じです。
1そうだね
プレイ済み
返信[1]
親投稿
otta777 otta777a
4文字ずつ調べるのでは無く5文字ずつ調べるのですか? 本文の内容からすると4文字ずつ調べるように読み散れるのですが いかがでしょうか?
0そうだね
プレイ済み
返信[2]
親投稿
ゆうたん yu-tan-sama
4文字なのか5文字なのか突っ込み入れたいのは我慢しておくとして 大まかに2つ方法があります 一つはMID$で何文字か取り出して、対象の文字列と比較、一致した回数を数えていく方法 もう一つはINSTR$で対象の文字列の有無を検索する方法 単純に考えると、後者の方がループ回数が少なくて済みそうなので早いかもしれません
0そうだね
プレイ済み
返信[3]
親投稿
ヨッシー okkun2002
ごめんなさい。5文字ずつです。 なので、「あいうえおあいうえおああうえお」で「あいうえお」を2で「ああうえお」を1みたいなかんじです
0そうだね
プレイ済み
返信[4]
親投稿
otta777 otta777a
5文字ずつ調べると言うことでよろしければFOR~NEXTで 増分を5にしてMID$関数で5文字ずつ取り出して調べる方法が 良いかと思います。 FOR I=0 TO LEN(A$)-1 B$=MID$(A$,I,5) IF B$="あいうえお" THEN C0=C0+1 IF B$="ああうえお" THEN C1=C1+1 NEXT
0そうだね
プレイ済み
返信[5]
親投稿
こうやま kouyama1967
 あと「INSTR」という関数が存在するので、その機能もヘルプで調べてみて下さい。INSTRと、一つ上のおったさんのMID$を使った説明を組み合わせれば、かなり出来ると思います。  なお文字列操作で「最初の一文字目」を指定する値は、昔のBASICでは「1」でしたが、C言語やプチコンでは「0」です。
0そうだね
プレイ済み
返信[6]
親投稿
ヨッシー okkun2002
すみません、「あいうえお」「ああうえお」以外の文字がでる可能性がある場合は難しいのでしょうか。
0そうだね
プレイ済み
返信[7]
親投稿
ゆうたん yu-tan-sama
思うに文字列圧縮の次のステージとして、ハフマン符号化とかに挑戦するのかなーと思いますが 基本的には上で言ってることの延長で良いかと思います ただ、比較、カウント対象の文字列がどんどん増えていくので、新しいパターンを見つけるたびにPUSH命令で文字列パターンとカウントの配列の要素数をそれぞれ増やしていくことになるんじゃないかなー
0そうだね
プレイ済み
返信[8]
親投稿
ヨッシー okkun2002
圧縮のために考えてます。一番出現率が高い文字を一文字にかえ最後に辞書データを作るつもりなので、4文字でも5文字でもいいのですが何が出てくるのかわからない時はどうすればいいのでしょうか
0そうだね
プレイ済み
返信[9]
親投稿
ゆうたん yu-tan-sama
何が出てくるかわからないから出てきたパターン全てを候補に追加して統計を取っていきます 確かふつーの圧縮プログラムもそういうめんどくさいことをやってたはず
0そうだね
プレイ済み
返信[10]
親投稿
ヨッシー okkun2002
PUSH...初めて聞きました。配列の要素数を後から変えられるとは..........
0そうだね
プレイ済み
返信[11]
親投稿
otta777 otta777a
幾つもカウントする文字列がある場合は配列文字列変数に 代入してカウントも配列変数でやる方法がありますが 事前にカウントする文字列を用意する必要があります。 配列文字列変数C$にカウントする文字列を代入しておいて FOR I=0 TO LEN(A$)-1 B$=MID$(A$,I,5) FOR J=0 TO LEN(C$)-1 IF B$=C$[J] THEN C[J]=C{J]+1 NEXT NEXT
0そうだね
プレイ済み