提供: Japanese Scratch-Wiki

(デフォルトソートの整備(Botによる自動編集)文字列を比較する --> もしれつをひかくする)
(3.0ify)
 
11行目: 11行目:
 
<scratchblocks>
 
<scratchblocks>
 
定義 (文字列1) と (文字列2) の違いを調べる
 
定義 (文字列1) と (文字列2) の違いを調べる
(すべて v) 番目を [文字一覧 v] から削除する
+
[文字一覧 v] のすべてを削除する
 
[i v] を [1] にする
 
[i v] を [1] にする
 
[違っている文字 v] を [] にする //結果を初期化
 
[違っている文字 v] を [] にする //結果を初期化
 
((文字列1) の長さ) 回繰り返す  //文字列1の文字をリストに入れる
 
((文字列1) の長さ) 回繰り返す  //文字列1の文字をリストに入れる
   ((i) 番目\( (文字列1) \)の文字) を [文字一覧 v] に追加する
+
   ((文字列1) (i) 番目の文字) を [文字一覧 v] に追加する
 
   [i v] を (1) ずつ変える
 
   [i v] を (1) ずつ変える
 
end
 
end
 
[i v] を [1] にする
 
[i v] を [1] にする
 
((文字列2) の長さ) 回繰り返す //文字列2の文字を1文字ずつしらべる
 
((文字列2) の長さ) 回繰り返す //文字列2の文字を1文字ずつしらべる
   もし <<[文字一覧 v] に ((i) 番目\( (文字列2) \)の文字) が含まれる> ではない> なら  
+
   もし <<[文字一覧 v] に ((文字列2)(i)番目の文字) が含まれる> ではない> なら  
 
     [j v] を [1] にする
 
     [j v] を [1] にする
 
     [重複 v] を [0] にする
 
     [重複 v] を [0] にする
 
     ((違っている文字) の長さ) 回繰り返す //すでに結果に含まれる文字の場合は重複フラグをたてる
 
     ((違っている文字) の長さ) 回繰り返す //すでに結果に含まれる文字の場合は重複フラグをたてる
       もし <((i) 番目\( (違っている文字) \)の文字) = ((i) 番目\( (文字列2) \)の文字)> なら  
+
       もし <((違っている文字)(i)番目の文字) = ((文字列2)(i)番目の文字)> なら  
 
         [重複 v] を [1] にする
 
         [重複 v] を [1] にする
 
       end
 
       end
30行目: 30行目:
 
     end
 
     end
 
     もし <(重複) = [0]> なら  //重複がない場合のみ結果に追加
 
     もし <(重複) = [0]> なら  //重複がない場合のみ結果に追加
       [違っている文字 v] を ((違っている文字) と ((i) 番目\( (文字列2) \)の文字)) にする
+
       [違っている文字 v] を ((違っている文字) と ((文字列2)(i)番目の文字)) にする
 
     end
 
     end
 
   end
 
   end
 
   [i v] を (1) ずつ変える
 
   [i v] を (1) ずつ変える
 
end
 
end
(すべて v) 番目を [文字一覧 v] から削除する
+
[文字一覧 v] のすべてを削除する
 
[i v] を [1] にする
 
[i v] を [1] にする
 
((文字列2) の長さ) 回繰り返す  //文字列2の文字をリストに入れる
 
((文字列2) の長さ) 回繰り返す  //文字列2の文字をリストに入れる
   ((i) 番目\( (文字列2) \)の文字) を [文字一覧 v] に追加する
+
   ((文字列2)(i)番目の文字) を [文字一覧 v] に追加する
 
   [i v] を (1) ずつ変える
 
   [i v] を (1) ずつ変える
 
end
 
end
 
[i v] を [1] にする
 
[i v] を [1] にする
 
((文字列1) の長さ) 回繰り返す  //文字列1の文字を1文字ずつしらべる
 
((文字列1) の長さ) 回繰り返す  //文字列1の文字を1文字ずつしらべる
   もし <<[文字一覧 v] に ((i) 番目\( (文字列1) \)の文字) が含まれる> ではない> なら  
+
   もし <<[文字一覧 v] に ((文字列1)(i)番目の文字) が含まれる> ではない> なら  
 
     [j v] を [1] にする
 
     [j v] を [1] にする
 
     [重複 v] を [0] にする
 
     [重複 v] を [0] にする
 
     ((違っている文字) の長さ) 回繰り返す  
 
     ((違っている文字) の長さ) 回繰り返す  
       もし <((i) 番目\( (違っている文字) \)の文字) = ((i) 番目\( (文字列1) \)の文字)> なら  
+
       もし <((違っている文字)(i)番目の文字) = ((文字列1)(i)番目の文字)> なら  
 
         [重複 v] を [1] にする
 
         [重複 v] を [1] にする
 
       end
 
       end
53行目: 53行目:
 
     end
 
     end
 
     もし <(重複) = [0]> なら  
 
     もし <(重複) = [0]> なら  
     [違っている文字 v] を ((違っている文字) と ((i) 番目\( (文字列1) \)の文字)) にする
+
     [違っている文字 v] を ((違っている文字) と ((文字列1)(i)番目の文字)) にする
 
     end
 
     end
 
   end
 
   end
65行目: 65行目:
 
<scratchblocks>
 
<scratchblocks>
 
定義 (文字列1) と (文字列2) の違いを調べる
 
定義 (文字列1) と (文字列2) の違いを調べる
(すべて v) 番目を [文字一覧 v] から削除する
+
[文字一覧 v] のすべてを削除する
 
[i v] を [1] にする
 
[i v] を [1] にする
 
[同じ文字 v] を [] にする
 
[同じ文字 v] を [] にする
 
((文字列1) の長さ) 回繰り返す  
 
((文字列1) の長さ) 回繰り返す  
   ((i) 番目\( (文字列1) \)の文字) を [文字一覧 v] に追加する
+
   ((文字列1)(i)番目の文字) を [文字一覧 v] に追加する
 
   [i v] を (1) ずつ変える
 
   [i v] を (1) ずつ変える
 
end
 
end
 
[i v] を [1] にする
 
[i v] を [1] にする
 
((文字列2) の長さ) 回繰り返す  
 
((文字列2) の長さ) 回繰り返す  
   もし <[文字一覧 v] に ((i) 番目\( (文字列2) \)の文字) が含まれる> なら  
+
   もし <[文字一覧 v] に ((文字列2)(i)番目の文字) が含まれる> なら  
 
     [j v] を [1] にする
 
     [j v] を [1] にする
 
     ((同じ文字) の長さ) 回繰り返す  
 
     ((同じ文字) の長さ) 回繰り返す  
       もし <((j) 番目\( (同じ文字)\)の文字) = ((i) 番目\( (文字列2) \)の文字)> なら  
+
       もし <((同じ文字)(j)番目の文字) = ((文字列2)(i)番目の文字)> なら  
 
         [重複 v] を [1] にする
 
         [重複 v] を [1] にする
 
       end
 
       end
83行目: 83行目:
 
     end
 
     end
 
     もし <(重複) = [0]> なら  
 
     もし <(重複) = [0]> なら  
       [同じ文字 v] を ((同じ文字) と ((i) 番目\( (文字列2) \)の文字)) にする
+
       [同じ文字 v] を ((同じ文字) と ((文字列2)(i)番目の文字)) にする
 
     end
 
     end
 
   end
 
   end

2020年12月23日 (水) 08:17時点における最新版

このきじは ひらがなのページがありません。ごめんなさい。編集者向け:作成する

この記事で扱う文字列の比較とは、2つの文字列を分析し、共通する部分や違っている部分を調べることである。

  • ユーザーが入力した答えを「正解」とくらべて同じ部分と違う部分を調べる
  • 複数のユーザーからのアンケートの回答をクラウドデータに保存しておき、それを分析して表示するアンケート調査プロジェクト

共通しない文字を調べる

2つの異なる変数 の一部の文字が違っている場合、たとえば変数1の値がpotato変数2の値がtomatoの場合、「p」は変数1のみ、「m」は変数2のみに含まれるため、これらの違いは「pm」と表せる。

次に、ブロック定義のパラメーター (引数) として与えられた2つの文字列を比較し、このような違い (2つの変数のどちらか一方でしか使われていない文字) を調べるスクリプトの例を示す。文字列2にあって文字列1にない文字を調べたあと、文字列1にあって文字列2にない文字を調べる (双方向で調べる) 必要があることに注意してほしい。

定義 (文字列1) と (文字列2) の違いを調べる
[文字一覧 v] のすべてを削除する
[i v] を [1] にする
[違っている文字 v] を [] にする //結果を初期化
((文字列1) の長さ) 回繰り返す  //文字列1の文字をリストに入れる
  ((文字列1) の (i) 番目の文字) を [文字一覧 v] に追加する
  [i v] を (1) ずつ変える
end
[i v] を [1] にする
((文字列2) の長さ) 回繰り返す //文字列2の文字を1文字ずつしらべる
  もし <<[文字一覧 v] に ((文字列2)の(i)番目の文字) が含まれる> ではない> なら 
    [j v] を [1] にする
    [重複 v] を [0] にする
    ((違っている文字) の長さ) 回繰り返す //すでに結果に含まれる文字の場合は重複フラグをたてる
      もし <((違っている文字)の(i)番目の文字) = ((文字列2)の(i)番目の文字)> なら 
        [重複 v] を [1] にする
      end
      [j v] を (1) ずつ変える
    end
    もし <(重複) = [0]> なら  //重複がない場合のみ結果に追加
      [違っている文字 v] を ((違っている文字) と ((文字列2)の(i)番目の文字)) にする
    end
  end
  [i v] を (1) ずつ変える
end
[文字一覧 v] のすべてを削除する
[i v] を [1] にする
((文字列2) の長さ) 回繰り返す   //文字列2の文字をリストに入れる
  ((文字列2)の(i)番目の文字) を [文字一覧 v] に追加する
  [i v] を (1) ずつ変える
end
[i v] を [1] にする
((文字列1) の長さ) 回繰り返す  //文字列1の文字を1文字ずつしらべる
  もし <<[文字一覧 v] に ((文字列1)の(i)番目の文字) が含まれる> ではない> なら 
    [j v] を [1] にする
    [重複 v] を [0] にする
    ((違っている文字) の長さ) 回繰り返す 
      もし <((違っている文字)の(i)番目の文字) = ((文字列1)の(i)番目の文字)> なら 
        [重複 v] を [1] にする
      end
      [j v] を (1) ずつ変える
    end
    もし <(重複) = [0]> なら 
    [違っている文字 v] を ((違っている文字) と ((文字列1)の(i)番目の文字)) にする
    end
  end
  [i v] を (1) ずつ変える
end

共通する文字を調べる

2つの文字列に共通する文字が知りたい場合は、先ほどのスクリプトを次のように変更すればよい。

定義 (文字列1) と (文字列2) の違いを調べる
[文字一覧 v] のすべてを削除する
[i v] を [1] にする
[同じ文字 v] を [] にする
((文字列1) の長さ) 回繰り返す 
  ((文字列1)の(i)番目の文字) を [文字一覧 v] に追加する
  [i v] を (1) ずつ変える
end
[i v] を [1] にする
((文字列2) の長さ) 回繰り返す 
  もし <[文字一覧 v] に ((文字列2)の(i)番目の文字) が含まれる> なら 
    [j v] を [1] にする
    ((同じ文字) の長さ) 回繰り返す 
      もし <((同じ文字)の(j)番目の文字) = ((文字列2)の(i)番目の文字)> なら 
        [重複 v] を [1] にする
      end
      [j v] を (1) ずつ変える
    end
    もし <(重複) = [0]> なら 
      [同じ文字 v] を ((同じ文字) と ((文字列2)の(i)番目の文字)) にする
    end
  end
  [i v] を (1) ずつ変える
end
Cookieは私達のサービスを提供するのに役立ちます。このサービスを使用することにより、お客様はCookieの使用に同意するものとします。