文字列比較のプログラムの考え方(3)

この課題では2つの文字列長が等しい前提で,2つの文字列の一致を検査する

文字列の一致状況を表す変数checkを導入
checkは0か1の2つの値しかとらず,1なら一致状態,0なら不一致状態を表す。

検査を開始する前にcheck=1にしておく。
0号室同士,1号室同士,というように順に,検査を開始して,不一致が見つかったら,check=0にする。
checkを1に戻す手段はないようにしておく。
この検査は片方の文字列の全文字について行なう。
(文字列の先頭から文字列の終わりまで行なう)

検査が終了したら,checkの値に従って,"equal" または "not equal" を表示する。


    /*検査*/
    check=1;
    if (mystr1[0]!=mystr2[0]) check=0;
    if (mystr1[1]!=mystr2[1]) check=0;
    if (mystr1[2]!=mystr2[2]) check=0;
          :
      文字列の終わりまで繰り返し
          :

このような形は,繰り返し構造になりそうなので同じ形の繰り返しにする。
「   int ptr;  /*検査する文字列配列の要素番号*/ 」を用意する。

    /*検査*/
    check=1;
    ptr=0;
    if (mystr1[ptr]!=mystr2[ptr]) check=0;
    ptr++;
    if (mystr1[ptr]!=mystr2[ptr]) check=0;
    ptr++;
    if (mystr1[ptr]!=mystr2[ptr]) check=0;
    ptr++;
          :
      文字列の終わりまで繰り返し
          :


あるいは

    /*検査*/
    check=1;
    ptr=0;
    if (mystr1[ptr]!=mystr2[ptr]) {
        check=0;
    }
    ptr++;
    if (mystr1[ptr]!=mystr2[ptr]) {
        check=0;
    }
    ptr++;
    if (mystr1[ptr]!=mystr2[ptr]) {
        check=0;
    }
    ptr++;
          :
      文字列の終わりまで繰り返し
          :

プログラミング時点では何回繰り返すのかわからないので,while文になる。

文字列の終わりを判断するためには,
mystr1[ptr]!='\0'
を満たしている間,繰り返せばよいことになる。
(2つの文字列長は等しいので,片方だけ見ていればよい)

    /*検査*/
    check=1;
    ptr=0;
    while (mystr1[ptr]!='\0') {
        if (mystr1[ptr]!=mystr2[ptr]) check=0;
        ptr++;
    }

あるいは次のようにしておくと,無駄な比較をしないようになる

    /*検査*/
    check=1;
    ptr=0;
    while (mystr1[ptr]!='\0') {
        if (mystr1[ptr]!=mystr2[ptr]) {
            check=0;
            break; /*一番内側のループ構造から抜け出す*/
        }
        ptr++;
    }