今日は、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)」のときは何を比較するのでしょうか。
宜しくお願いします。
No.5ベストアンサー
- 回答日時:
strcmpとは、文字列1と文字列2の大小を比較します。
文字列の長さの比較ではありりません。また、文字列と文字は違います。文字列は、必ず終端にNULL文字('\0'と書きます。数値の0の値をとります)が有る状態のことをいいます。文字列とは、"abc"などですが、'x'は1文字ですので、文字列ではありません。したがって、strcmp("abc",'x')は、そもそもコンパイルエラーとなり、実行できません。(文字列と文字列の比較しか出来ません)ここから、本題。
> 前の文字が一文字(h)で後ろ文字が複数(abc)、
> 前の文字が複数(hjk)で後ろの文字が一文字(p)、
> 両方が複数の文字列(lmnとstu)
"h"と"abc"の比較と解釈します。'h'と"abc"の比較は、前述しましたようにコンパイルエラーになります。
"h"とは、1文字目がh,2文字目が\0の状態です。
同様に、"abc"は、1文字目がa,2文字目がb,3文字目がc,4文字目が\0の状態です。
strcmp("h","abc")は
まず1文字目どうしを比較します。
hとaです。hのほうが大きいので+の値を返して終わりです。
"hjk"と"p"の比較は
strcmp("hjk","p")です。
1文字目どうしを比較します。hとpでは、pのほうが大きいので-の値を返して終わりです。
strcmp("lmn","stu")
1文字目のlとsを比較します。sのほうが大きいので、-の値を返して終わりです。
以下、余談。
strcmp("abc","abx")
1文字目が同じで決着つかず。次の文字へ
2文字目が同じで決着つかず。次の文字へ
3文字目でxが大きいので-を返します。
strcmp("abc","abc")
1文字目が同じで決着つかず。次の文字へ
2文字目が同じで決着つかず。次の文字へ
3文字目同じで決着つかず。次の文字へ
次の文字がないので0を返す。(文字列が同じケース)
strcmp("abc","abcd")
1文字目が同じで決着つかず。次の文字へ
2文字目が同じで決着つかず。次の文字へ
3文字目同じで決着つかず。次の文字へ
前の文字(左側)の文字は、次が'\0'なので、
値が0になります。dの方が大きいので-を返します。
No.7
- 回答日時:
> もう少し具体的に教えていただけないでしょうか。
> 全く意味が理解出来ません、宜しくお願いします。
これ以上具体的にと?
あなたの目の前に英和辞典があるとします。電子的なものではなくて、紙に印刷された本です。
今、開いているページにはhが載っています。これからabcという単語の意味を調べたいとしたら、どちらにページをめくっていきますか?
どちらにページをめくるかは、abcの1文字目であるaと、hを比較して決めませんか? abcが3文字であることは関係ないのではないですか?
あなたはなぜか1文字同士だと辞書の順番で、そうでない場合は違う方法だと思い込んでいるようですが、何文字であっても辞書の順番です。文字列の長さで比較するなどとはどこにも書かれていません。
この辞書の順番というのをプログラム的に説明されたのが、No.1の回答です。
No.6
- 回答日時:
国語辞典を引くときのことを想像してください。
「キーボード」という5文字の言葉と「マウス」という3文字の言葉では、
どちらが前に載っていますか?
「えんぴつ」という4文字の言葉と「シャープペンシル」という8文字の言葉では、
どちらが前に載っていますか?
どちらが前に載っているかと、言葉の長さとに、関係がありますか?
No.4
- 回答日時:
> 前の文字が一文字(h)で後ろ文字が複数(abc)
あなたがabcを辞書で調べるとき、たまたま開いたページに載っていたのがhだったら、そのページより前を調べますよね。abcが3文字だということが、辞書のhより前のページを調べるか、後のページを調べるかに影響しますか?
m-さん、回答有り難う御座います。
>あなたがabcを辞書で調べるとき、たまたま開いたページに載っていたのがhだったら、そのページより前を調べますよね。
>abcが3文字だということが、辞書のhより前のページを調べるか、後のページを調べるかに影響しますか?
もう少し具体的に教えていただけないでしょうか。
全く意味が理解出来ません、宜しくお願いします。
No.1
- 回答日時:
双方の0文字目を比較します。
勝負がついたら(等しくなければ)比較終了。勝負がつかなかったら1文字目を比較します。
それでも勝負がつかなかったら2文字目を比較します。
...以下同文。
この処理の途中でどちらかがタネ切れ(比較すべき文字がなくなった)なら、短い方の負けです。
双方同時にタネ切れなら、最後の文字の比較結果となります。
epistemeさん、回答有り難う御座います。
>双方の0文字目を比較します。勝負がついたら(等しくなければ)比較終了。
# 比較するのは辞書に出てくる文字の順序を数字化したものだけが対象でしょうか。
文字列の長さは比較の対象ではないのでしょうか。
前の文字が一文字(h)で後ろ文字が複数(abc)、
前の文字が複数(hjk)で後ろの文字が一文字(p)、
両方が複数の文字列(lmnとstu)
だったら一体どのように比較していくのでしょうか。
スミマセン、宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# いまc言語の標準ライブラリ文字列を勉強しているのですがいまいちわかりません。 strcmpとmemc 5 2023/07/04 15:34
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- Excel(エクセル) エクセルの日付から年末尾2桁と月を1月をA~Lに変換したい 3 2022/08/08 10:32
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- Excel(エクセル) Excel 同一セル内 年、日 入れ替え 5 2022/04/09 01:48
- Java Java 南京錠 2 2023/02/04 11:46
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Excel(エクセル) エクセルの数式で教えてください。 3 2022/10/25 10:52
- Visual Basic(VBA) 違う文字のみ色を塗る方法がわかりません。。 G列とH列のに文字が入っています。 例えばG5とH5の文 3 2022/06/03 17:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのクエリで、replace関数...
-
ダブルクォーテーションを文字...
-
文字列の後ろから必要分だけ削...
-
エクセル関数で記号から記号の...
-
VB2008 文字列に等間隔にスペ...
-
strcmp( )関数について教えて...
-
UNICODE文字が含まれているかの...
-
vbsの文字列代入
-
GetDlgItemTextについて
-
右から何文字目にあるか文字位...
-
VS C++6.0のCString にて先頭1...
-
秀丸マクロで、ダブルクォーテ...
-
CSVの禁則文字
-
文字列にアルファベットが何文...
-
お願いです!!
-
ステータスバーに・・・。
-
64進数
-
vb.net IVSの漢字を1文字切り...
-
Excelで指定した日付から過去の...
-
ExcelVBAを使って、値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのクエリで、replace関数...
-
文字列の後ろから必要分だけ削...
-
UNICODE文字が含まれているかの...
-
ダブルクォーテーションを文字...
-
文字列にアルファベットが何文...
-
エクセル関数で記号から記号の...
-
strcmp( )関数について教えて...
-
awk で右端の文字を1文字削除...
-
C言語でギリシャ文字は使えます...
-
右から何文字目にあるか文字位...
-
VBからACCESSのレポートを印...
-
文字数と単語数を数えるプログラム
-
VBScriptでXcopyしたいのですが
-
秀丸マクロで、ダブルクォーテ...
-
テキストの文字列検索で、検索...
-
◆COUNTIF関数またはダブルクォ...
-
エクセルのマクロでセルに数式...
-
CSVの禁則文字
-
環境依存文字?をEnumで定義したい
-
VB2008 同じ文字型変数を列挙す...
おすすめ情報