- ベストアンサー
この関数がどのような計算を行うものか教えて下さい。
#define NULLC(char) 0 #define YES 1 #define NO 0 int string_compare(char *s1, char*s2){ while(*s1==*s2) if(*s1==NULLC) if(*s2==NULLC) return YES; else return NO; else if(*s2==NULLC) return NO; else{++s1;++s2;} return NO; }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★文字列の比較関数ですね。 ・文字列 s1 と文字列 s2 が一致したらば YES、異なれば NO を返すようです。 ・下に書き直した(分かりやすくした)ソースを載せておきます。 ●整形 #define NULLC ((char)'\0') #define YES 1 #define NO 0 int string_compare( char *s1, char *s2 ) { while ( *s1 == *s2 ){ if ( *s1 == NULLC ){ if ( *s2 == NULLC ){ return YES; } else{ return NO; } } else if( *s2 == NULLC ){ return NO; } else{ ++s1; ++s2; } } return NO; } 最後に: ・回答者 No.1 さんの言うとおりで『string_compare』は文字列比較の関数ですね。 ・以上。おわり。
その他の回答 (2)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★質問者さんの解釈どおりです。 ・あっています。 ・ちなみにポインタを利用した文字列の比較関数を参考までに載せます。 ●サンプル(文字列の比較) int MyStrCmp( const char *string1, const char *string2 ) { while ( *string1 == *string2 ){←文字列が同じときの処理 if ( *string1 == '\0' ){←文字列の最後なら完全一致 return( 0 );←一致 } string1++; string2++; } return( 1 );←不一致 } 解説: ・文字列ポインタの文字を参照して違えば直ちに不一致 ・同じときは、文字列の最後をチェックして最後なら完全一致 ・同じときでも文字列の最後でなければ次へ進むを繰り返す 関連: ・http://oshiete1.goo.ne.jp/qa2577202.html→『ポインタで詰まりました』 最後に: ・カッコがないと確かに分かりにくいですね。 ・ですから、私は必ずカッコをつけて記述します。 ・もちろん、カッコは文法的には省略可能ですが…。 ・それで、カッコがない場合は次の1文(if、else if、else)などを実行することになります。 ・今回の場合は『else{++s1;++s2;}』の部分から上に向かってカッコを追加していきました。 ・質問者さんも『else{++s1;++s2;}』の部分から上に向かってカッコを追加して確かめてみましょう。 ・以上。おわり。
お礼
こんばんは とてもわかりやすいです。 ありがとうございました。
- koko_u
- ベストアンサー率12% (14/116)
string_compare と書いであるじゃないか。
お礼
英語苦手なうえ初心者なので全く分からんのですが、 回答ありがとうございました。
お礼
回答ありがとうございます。 初心者なので{}が無いとwhileがどっからどこまでかとかが わからないんですよ。見やすくなりました。ありがとうございます。 これはこういう事でいいんですかね? 1.与えられた2つの文字が等しくないときNOを返す。 2.与えられた二つの文字が2つとも等しく、かつNULL文字であった場合YESを返す。 3.どちらか片方がNULL文字だった場合NOを返す 4.どちらもNULL文字でない場合は2つの文字をインクリメントして2以降の繰り返し。