問題が提示され、その答えをタイピングで答えるというものです。
実はかなり前から壁にぶち当たっていました。
当初は文字列配列同士を比較して、同じなら正解判定、違うなら不正解判定、という感じで書いていました。
以下はタイピング問題そのものではなく、文字列配列の比較の簡易的な具体例です。
実際は「文字列1」には外部データより読み込んだ解答を配列に格納し、「文字列2」にはKeyInputStringを使って答えを入力させます。
char moji1[16]="あいうえお"; //文字列1 char moji2[16]="あいうえお"; //文字列2 if(moji1==moji2) 正解判定; //文字列1と文字列2が同じなら正解判定 else 不正解判定; //違うなら不正解判定 //これだと正解判定になるはず。しかし、この方法だとどうやっても正解判定になるはずのものが不正解判定になってしまいます。
この段階で長いこと悩んでいました。
しばらく悩んでいた結果、配列全体同士を直接比較するのではなく、配列の個々同士を比較するときちんと思うように動作することに気がつきました。
先ほどのものを例にすると、moji1==moji2では不正解判定になるのにmoji1[0]==moji2[0]とするときちんと正解判定がでました。
つまり、以下のようにしてみたら正解判定になったのです。
char moji1[16]="あいうえお"; //比較文字列1 char moji2[16]="あいうえお"; //比較文字列2 if(moji1[0]==moji2[0]) 正解判定; //訂正箇所。各1バイト目同士が同じなら正解判定 else 不正解判定; //違うなら不正解判定そこで、以下のようにmoji1[0]~moji1[15]とmoji2[0]~moji2[15]を全て比較し、全て同じなら正解判定を出すプログラムを組んでみたところ、見事に成功しました。
char moji1[16]="あいうえお"; //比較文字列1 char moji2[16]="あいうえお"; //比較文字列2 int i; //for文のカウント用 int j=0; //一致数のカウント用 for(i=0;i<16;i++) if(moji1==moji2) j++; //iバイト目同士が同じならjを1増やす if(j==16) 正解判定; //j(一致数)が16、つまり完全一致なら正解判定 else 不正解判定; //違うなら不正解判定前置きが長くなってしまいましたが、ここで質問があります。
1.
上記のように「moji1==moji2」といった、文字列配列同士を直接比較するのは無理なのでしょうか?
実際は文字列配列同士の比較はできるのに、私に落ち度があって出来なかった可能性はないのでしょうか?
「moji1[0]==moji2[0]」から順番に全部比較するという回りくどい方法でしか比べられないのでしょうか?
2.
仮に文字列配列同士の比較が出来ない場合、上記のような配列の個々を順番に全部比較する方法以外に、何か別のもっと良い方法というものはありますか?
3.
これはタイトルとは関係ない質問となりますがご容赦ください。
タイピングして答えるという特性上、万が一表記の揺れがあったり(例:引っ越し/引越し/引越)するかもしれません。
また、漢字の読み方を答えさせる問題も検討しているため、ひらがなだけで答えさせたいのです。
最初に言った通り、DXライブラリのKeyInputStringを使って答えさせようとしているのですが、変換を禁止することは実現可能ですか?
以上、拙い文章ですが宜しくお願いします。
