提供:Japanese Scratch-Wiki
このきじは ひらがなでよめません。ごめんなさい。編集者向け:作成する
文字列Aに別の文字列Bが含まれているかどうかを調べるには、文字列A全体を順番に見ていき、文字列Bとまったく同じ文字の並びがそのまま出現するかどうかをチェックしなければいけない。このチュートリアルでは、このような「文字列Aに文字列Bが含まれている」かどうかをしらべるスクリプトについて説明する。
なお、これはScratch 3.0以降にある() に () が含まれるの代用ブロックでもある。
メモ:
文字列に指定文字が含まれているか調べるのと違って、この記事のスクリプトでは順番通りに文字を調べていく必要があることに注意してほしい。
グループ化して調べるアルゴリズム
もとの文字列から、検索ワードの長さ分、文字列を取り出して、検索ワードと一致しているかどうかをしらべる方法。取り出す位置を1字ずつずらして、検索ワードと同じ長さだけ文字列がとりだせなくなるまで繰り返す。 このスクリプトでは、次の変数を使用する。
- "結果" は、調べた結果、文字列が含まれていればtrue (真)、含まれていなければfalse (偽) を返す変数
- "文字グループ" は、もとの文字列の一部を取り出して入れる変数(キーワードとの比較に使う)
- "i" は、調べるグループを1つずつずらしていくのに使用する変数 (イテレーター)
- "j" は、調べるグループをつくるときに、1つずつ文字を指定するための変数(イテレーター)
なお、このカスタムブロックでは、「画面を再描画せずに実行する」オプションをオンにしておくこと。
定義 (もとの文字列) に (検索ワード) が含まれるか [結果 v] を [false] にする // 最初は「false」にしておき、探している文字列が見つかったら「true」にする [i v] を (1) にする ((((もとの文字列) の長さ) - ((検索ワード) の長さ)) + (1)) 回繰り返す もし <(結果) = [false]> なら [文字グループ v] を [] にする // 文字グループを初期化する [j v] を (i) にする ((検索ワード) の長さ) 回繰り返す // もとの文字列のi番目の文字から検索ワードと同じ長さ分、文字列を取り出す [文字グループ v] を ((文字グループ) と ((もとの文字列)の(j) 番目の文字::operators)) にする [j v] を (1) ずつ変える end もし <(文字グループ) = (検索ワード)> なら [結果 v] を [true] にする [このスクリプトを止める v] ::control end [i v] を (1) ずつ変える end end
関連記事
- 文字列に指定文字が含まれているか調べる — この記事とよく似ているが、こちらは指定文字として指定した文字が順番に関係なく含まれているかどうかを調べる方法を紹介している。
- 文字列を分割する
- 文字列