アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記コードを実行した時なぜ、「Under」になるのか理解できません。
どなたかお分かりの方がいましたら、教えていただきたいです。

よろしくお願いいたします。


【コード】
if(strcmp("54321","6789") > 0){
print "over";
}else{
print "Under";
}

A 回答 (3件)

ちょっと違います。




まずは、マニュアルをよく読みましょう
http://php.net/manual/ja/function.strcmp.php


> 54321 と 6789 は等しくないので、「-1」になり

ただ「等しくない」だけでは、 「-1になる」とは限りません。
もし、 '54321'>'6789' だったら、 +1 になるかもしれません。
さらに。マニュアルには、>0,<0 と書いてあるだけで、-1/+1とは書いてないので、例えば-5や+12 かもしれません。


ここでは '54321'<'6789'なので、strcmpが負の値を返します。



> -1と0を比べると0の方が大きいので、
>「Under」 になるという認識でよろしいでしょうか。

上記のように -1 ではありませんが、 0と比べたら0の方が大きいので、それ以降の認識はあってます。
    • good
    • 0
この回答へのお礼

お忙しい中、回答をしてくださって、ありがとうございました。
理解できました。

お礼日時:2015/02/10 00:31

>54321 と 6789 は等しくないので、「-1」になり



#1さんの解説をよく読めばわかりますが
単純にまえから順番に比較するので
"5"が"6"より小さいので-1になって「>0」が偽になり
Underとなっているということ
それは54321と6を比べても同じです。
    • good
    • 1
この回答へのお礼

お忙しい中、回答をしてくださって、ありがとうございました。
理解できました。

お礼日時:2015/02/10 00:29

strcmpはいわゆる「辞書順」という並び順を使っています。



1文字目同士を比較する
・両方とも1文字目が無い場合は「同じ」
・片方に1文字目が無い場合は、そちらが「小さい」
・両方に文字ある場合
   違っていれば、その文字順で小さい方が「小さい」
   同じだった場合は2文字目へ

2文字目同士を比較する
・両方とも2文字目が無い場合は「同じ」
・片方に2文字目が無い場合は、そちらが「小さい」
・両方に文字ある場合
   違っていれば、その文字順で小さい方が「小さい」
   同じだった場合は3文字目へ

以下同様に繰り返して比較します。

この比較方法で 54321 と 6789 を比較してみましょう。
    • good
    • 1
この回答へのお礼

お忙しい中、回答をしてくださって、ありがとうございました。

54321 と 6789 は等しくないので、「-1」になり、-1と0を比べると0の方が大きいので、
「Under」 になるという認識でよろしいでしょうか。

お礼日時:2015/02/08 23:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!