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

この課題では2つの文字列長が異なる場合も含めて,2つの文字列の一致を検査する

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

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

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


    /*検査*/
    check=1;
    ptr=0;
    while (mystr1[ptr]!='\0') {
        if (mystr1[ptr]!=mystr2[ptr]) check=0;
        ptr++;
    }
    /*mystr1の文字列の終わりの要素でループを抜け出してきている*/
    /*mystring2も文字列の終わりコードでなければ不一致*/
    if (mystr1[ptr]!=mystr2[ptr]) check=0;

無駄な比較をしないようにするには,途中でループ脱出することにする

    /*検査*/
    check=1;
    ptr=0;
    while (mystr1[ptr]!='\0') {
        if (mystr1[ptr]!=mystr2[ptr]) {
            check=0;
            break; /*一番内側のループ構造から抜け出す*/
        }
        ptr++;
    }
    /*mystr1の文字列の終わりの要素でループを抜け出してきた場合*/
    /*mystring2も文字列の終わりコードでなければ不一致*/
  if (mystr1[ptr]=='\0') {
        if (mystr1[ptr]!=mystr2[ptr]) check=0;
    }



別な考え方
文字列終了を示す'\0'まで等しいかどうかをチェックするなら,
後ろ判定ループ(do while)の方がスマートに記述できる。

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