strcmp関数の=== 0とは何ですか?

このQ&Aのポイント
  • strcmp関数の=== 0とは、厳密な比較演算子を使用して、strcmpの返り値が0と等しいかどうかを確認する意味です。
  • 比較演算子の===は、値と型が完全に一致する場合に真を返します。
  • 異なる型の値を比較する場合は、===を使用することで厳密な比較ができます。
回答を見る
  • ベストアンサー

if( strcmp( 引数, 引数 )=== 0

サンプルで、 if( strcmp( 第1引数, 第2引数 ) === 0 ){ て書いてあるコードを見たのですが、 この === 0 には、どういう意味があるのでしょうか? (==0とはどう違うのでしょうか? という意味です) 試しに、型の一致を確認できるのかな? と思いやってみたのですが、 うまくいきませんでした。 $a = "10"; $b = 10; if( strcmp( $a, $b ) === 0 ){ print "2つの文字列は同じです!"; } else { print "2つの文字列は違います"; } strrposの返り値判定に「===」を使うのだったら、 意味は分かるのですが、 それとは意味合いが違うような (strcmpに===を使う意味はないような)気もするのですが…

  • re999
  • お礼率61% (476/777)
  • PHP
  • 回答数3
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4851/10265)
回答No.2

この場合、全く違いはありませんが、「 == を使う必然性がない限り、比較は必ず === を使う」というコーディングルールにしているのではないかと思います。そのルールには意味があると思います。少なくとも「=== を使う必然性がない限り、比較には必ず == を使う」よりはずっといい。

re999
質問者

お礼

回答ありがとうございました。参考になりましたー

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

蛇足ですが、数値型のデータを文字列として比較している時点で 仕様にあいまいさがあり不適当なソースなので、厳密に ===でチェックする意味はありません。 本来比べるべき質のものじゃないですね・・・ ===0については、strcmpの戻り値が明確に数値型だということを 理解していれば自然とそうなります。 <? $a = (string) 10; $b = (int) 10; if( $a!==$b) print "そもそも違うものを比較する意味があるのか?"; if( strcmp( $a, $b )==0) print "1"; if( strcmp( $a, $b )=="0") print "2"; if( strcmp( $a, $b )==false) print "3"; if( strcmp( $a, $b )=="") print "4"; if( strcmp( $a, $b )==NULL) print "5"; if( strcmp( $a, $b )===0) print "6"; if( strcmp( $a, $b )==="0") print "7"; if( strcmp( $a, $b )===false) print "8"; if( strcmp( $a, $b )==="") print "9"; if( strcmp( $a, $b )===NULL) print "10"; ?>

re999
質問者

お礼

回答ありがとうございます。 >蛇足ですが、数値型のデータを文字列として比較している時点で >仕様にあいまいさがあり不適当なソースなので、厳密に >===でチェックする意味はありません。 >本来比べるべき質のものじゃないですね・・・ 確かにその通りなのですが…。 あくまでも勉強用ということで、 質問してみましたー

回答No.1

>には、どういう意味があるのでしょうか? >(==0とはどう違うのでしょうか? という意味です) まず「==」と「===」の違いは「PHP 比較演算子」で検索すればでてくる。 で今回の >(strcmpに===を使う意味はないような)気もするのですが… だけどはっきり言うと意味はない。

re999
質問者

お礼

回答ありがとうございました。 >だけどはっきり言うと意味はない。 はっきり言っていただけると助かります。 もしかしたら、何か特別な使い方があるのかもしれない、 と思い質問してみましたー

関連するQ&A

  • strcmp( )関数について教えて下さい

     今日は、Cの初心者です、宜しくお願いします。  a,bが一文字のとき、「if(strcmp(a,b)==0)」では、a,bの大小は辞書に出てくる順序を返すとありますが、 a="abcde",b="xyz"として「if(strcmp(a,b)==0)」とかくと、これは文字の長さを比較するのでしょうか。  それとも先頭文字のについて、辞書に出てくる順序の大小を返すのでしょうか。  本を読むと単に「比較する」とだけしか書いてないのですが、一体「文字」又は「文字列」の何を比較するのでしょう。  「辞書に出てくる順序」なのでしょうか、それとも「長さ」なのでしょうか。  一方が文字列(p="xyz")でもう一方が一文字(q)で「if(strcmp(p,q)==0)」のときは何を比較するのでしょうか。  宜しくお願いします。

  • PHPのstrcmp関数について

    PHPのstrcmp関数の動きがよくわかりません。 strcmp (PHP 4, PHP 5) strcmp — バイナリセーフな文字列比較 説明 int strcmp ( string $str1 , string $str2 ) この比較は大文字小文字を区別することに注意してください。 パラメータ str1 最初の文字列。 str2 次の文字列。 返り値 str1 が str2 よりも小さければ < 0 を、str1が str2よりも大きければ > 0 を、 等しければ 0 を返します。 ・・・・・・・・・とマニュアルには上記のようにあります。 聞きたい事!▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ 1 このstr1がstr2より大きいとはどういうことでしょうか? 2 実際に動きを確認するためにstrcmp関数を他のPHPのビルトイン関数で実現できないのでしょうか? 私の想像では、この関数にあたえる二つの引数を10進数に変換して、値の大きさを比較するという方法なのですが・・。 たとえば <?php $str01 = "a"; $str02 = "b"; print strcmp($str01,$str02); print "<br />"; //上記の値は-1がでるためこの場合 $aのほうが$bより小さいことになる。 //$aの値の文字aが小さいとは?どういうことか //私の、ぱっと思いついた方法は、以下のような意味? $str01 = bin2hex($str01); print $str01 ; //16進数でaという値を表すと61がでる print "<br />"; $str01 = hexdec($str01); print $str01; //10進数でaという値を表すと97がでる print "<br />"; //上記を同じく$bに行うと $str02 = bin2hex($str02); print $str02 ; //16進数でaという値を表すと62がでる print "<br />"; $str02 = hexdec($str02); print $str02; //10進数でaという値を表すと98がでる print "<br />"; print "<hr />"; /* 結果、$aは$bより 【小さい】という事なのでstrcmpは-1を返したと・・・。 こういう事をかんがえてみました。 そしてこれは、普通に考えれば a => bという順序なので アルファベット順になります。 しかしこのやり方だと */ $str03 = "aaaaaaa"; $str04 = "bb"; //と上記のような文字列があった場合同じく同じ手順で値をだすと $str03 = bin2hex($str03); print $str03 ; //16進数でaという値を表すと61616161616161がでる print "<br />"; $str03 = hexdec($str03); print $str03; //10進数でaという値を表すと27410143614427489がでる print "<br />"; //上記を同じく$bに行うと $str04 = bin2hex($str04); print $str04 ; //16進数でaという値を表すと6262がでる print "<br />"; $str04 = hexdec($str04); print $str04; //10進数でaという値を表すと25186がでる print "<br />"; /*ただ上記の方法だと、$str03と$str04を比較すると$str04の【bb】という値の方が 小さくなり順序的には bb => aaaaaaとなりアルファベット順にするとこができない。 三つ目の質問 3 アルファベット順にソートしたいとき標準のsort関数を使わずに他のPHPの標準関数の組み合わせでアルファベット順に並び替える 関数はつくれないのか? どなたか、ご意見お聞かせください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • if文の判定条件('||'と'&&'の使い方)

    ○if文の判定条件への理解が弱いため、下記プログラムを作成し、 疑問があったため、質問をしたいと思っております。 #include<stdio.h> #include<string.h> int main() { char moji[]= "A"; /***********************************************************/ if( 0 != strcmp( moji , "A" ) || strcmp( moji , "B" ) ) ^^(1) /***********************************************************/ { printf( "文字不一致" ); } else { printf( "文字一致" ); } return (0); } ○質問 「/*/」で囲ったif文の判定箇所になりますが、 この判定条件は"配列mojiに格納されている値が"A",または"B"以外の" ときに、画面上に「文字不一致」を出力します。そうでなければ 「文字一致」を出力します。 今回、配列mojiには"A"が格納されており、「文字一致」が画面に 出力されるはずですが、「文字不一致」が出力されてしまいます。 判定条件が誤っていると思い、色々と試したところ、(1)の箇所を 「&&」にしたときに、「文字不一致」が出力されます。 「||」(論理和)と「&&」(論理積)が理解できていないと思われ、 この部分を交えて、何故「&&」にしないと「画面不一致」と出力 されないのかを、ご教授の程お願い致します。

  • strcmp関数などでの複数の文字列の比較

    以下の例はランダムなiの値で文字列にアクセスして その文字列がどの文字列であるかを判定しているプログラムです。 char *string[] = {   "aaa",   "bbb",   "ccc", } ; int i = rand() % 3; if ( strcmp( string[ i ], "aaa" ) == 0 ) {   printf("aaaです"); } if ( strcmp( string[ i ], "bbb" ) == 0 ) {   printf("bbbです"); } if ( strcmp( string[ i ], "ccc" ) == 0 ) {   printf("cccです"); } するとこのようにif文の羅列になってしまいます。 (strstr関数を使う場合などでも同じような感じです。) 複数の文字列を判定する場合などにもっと良い手法は無いでしょうか?

  • C言語 if分岐 strcmp

    失礼します。現在test_wordに格納されている文字列を数字の0又は空白だった場合の条件を記述していきたいのですが、うまくいきません。 最初の条件で0又は空白ではない場合を記述し else ifで0又は空白の場合を記述しています。 ステップ実行して確認しているのですが、 test_wordに0又は空白が入っているのに一番最初の処理をしてしまいます。 ご教授頂きたいです。よろしくお願いします。 char blank_word[10]; char miss_word[10]; strcpy(blank_word, ""); strcpy(miss_word,"0"); if ((strcmp(test_word, blank_word) != 0) || (strcmp(test_word,miss_word) != 0)) { 0又は空白ではないの処理; } else if (strcmp(test_word, blank_word) == 0 || strcmp(test_word, miss_word) == 0 && flag == 1) { 0又は空白である場合の処理; }

  • strcmp

    超C言語初心者です。strcmpを使わずに文字列を比較する文を書いているのですが、途中でわからなくなりました。 宜しければご指摘お願いします。 #include<stdio.h> int main(){ char cp1[100],char2[100]; int i=0; int j=0 printf("1つ目の文字列:\n"); scanf("%s\n",cp1); printf("2つ目の文字列:\n"); scanf("%s\n",cp2); while(cp1[i]=='\0' || cp2[j]=='\0'||cp1[i]==cp2[j]=='\0'){ cp1[i++]; cp2[j++]; } if(cp[i]==cp2[j]=='\0'){ printf("同じ文字数\n); }else if (cp1[i]=='\0'&&cp2[j]!='\0'){ printf("2つ目の方が大きい\n); }else if (cp2[j]=='\0'&&cp1[i]!='\0'){ printf("1つ目の方が大きい\n); } exit(0); } と今書いています。間違いだらけでしょうが、お願いします!!

  • 実行時エラー’13’ 型が一致しません VBA

    セルに以下の文字列が入っています。 A1=10(451 A2=452 そしてVBAにて、以下のプログラムを実行すると、「実行時エラー’13’ 型が一致しません」というエラーになってしまいました。 原因はA1に「( 」があるので文字列だからだと思うのですが、「IF 条件文」が成立しないことは満たすのでElse以下を実行されるのを期待していたのですが。 アドバイスをお願いします。 また、そもそも変数を宣言してないので「型が一致しない」というエラーの意味がわからないのですが。 If Cells(1, 1) - Cells(2, 1) = 1 Then Cells(3, 1) = 1 Else Cells(3, 1)="c" End If

  • 条件分岐が多いIF分の書き方について。

    テキスト入出力でのIF分についてご質問がございます。 例えば条件が多いときに、結果が得られない時があるのですが 書き方で何か問題があるのならご指摘ください。 下記のコードでご説明します。 //コード1の文字列が04でコード2の文字列が01の場合00001を表示 if (コード1.compareTo ("04") == 0 && コード2 .compareTo ("01") == 0 ) { out.print ("00001"); //コード1の文字列が04でコード3の文字列が2の場合00005を表示 } else if (コード1.compareTo ("04") == 0 && コード3 .compareTo ("02") == 0 ) { out.print ("00005"); //コード1の文字列が08でコード3の文字列が07の場合10000を表示 } else if (コード1.compareTo ("08") == 0 && コード3 .compareTo ("07") == 0 ) { out.print ("10000"); //コード1の文字列が10でコード5の文字列が07の場合30000を表示 } else if (コード1.compareTo ("10") == 0 && コード5 .compareTo ("07") == 0 ) { out.print ("30000"); //それ以外エラー } else { out.print("エラー");} } 値がIF分の条件とマッチしていても if (コード1.compareTo ("04") == 0 && コード2 .compareTo ("01") == 0 ) { out.print ("00001"); //コード1の文字列が04でコード3の文字列が2の場合00005を表示 } else if (コード1.compareTo ("04") == 0 && コード3 .compareTo ("02") == 0 ) { out.print ("00005"); //コード1の文字列が08でコード3の文字列が07の場合10000を表示 } else if (コード1.compareTo ("08") == 0 && コード3 .compareTo ("07") == 0 ) { out.print ("10000"); このコードまでに当てはまらない条件はすべて ("10000"); の結果になり つまりそれ以降のelse if の条件に 当てはまらなくなります。 else if をいくらでも増やして条件分岐出来ると学習して 検証しているのですが・・・ 最終的にがIF~else if ~elseで 30パターンぐらい条件分岐したいと思ってます。 初歩的なご質問で恐縮ですが アドバイス よろしくお願いします。

    • ベストアンサー
    • Java
  • 引数のある関数と引数のない関数の設定

     お世話になっております。 PHPのプログラミングで関数をつくる際に、引数を渡す関数と引数がない関数がありますが、すでに定義済みの関数のように、引数がある場合と引数がない場合の両方を取り扱うにはどうしたらよいでしょうか? function example ($a) { if ($a == 0 || $a == '') { print '引数なし'; } else { print $a; } } のような関数で、 example(); という感じで引数を入れないと、 Warning: Missing argument … というエラーがでてしまいます。関数を example(''); と呼び出すと大丈夫なのですが。。。 プログラマーにとって基本的なことだと思うのですが、調べてもなかなか出てこないので質問させて頂きました。どなたかわかる方がいたらしたらおしえてください。 よろしくお願いします! }

    • ベストアンサー
    • PHP
  • Excel97で、If文をなんとかしたい

    IF文でなんとかなりそうなんですが、IF文を使った事がなくて。 A列   B列   C列    任意の位置のセルD 数式  文字列   数式  文字列 数式  文字列 数式  文字列 こんな表で、Bの文字列の値と、Dのセルの値が一致した時、Aの数式の値(数字)をCの列に表示させ、BとDの文字が一致しない時は、”エラー”を表示させたいんですが、どういう風にすればいいのでしょうか? IF文を使えばいいのでしょうか? どういう風に、数式を立てればいいのかわかりません。 どなたか詳しい方、教えていただけませんか?