文字列比較のプログラムの考え方(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; } |
/*検査*/ check=1; ptr=-1; do { ptr++; if(mystr1[ptr]!=mystr2[ptr]){ check=0; break; /*一番内側のループ構造から抜け出す*/ } } while(mystr1[ptr]!='\0'); |