今日は、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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
つい集めてしまうものはなんですか?
人間誰もは1つ「やたらこればかり集めてしまう」というものがあるもの。 あなたにとって、つい集めてしまうものはなんですか?
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
「お昼の放送」の思い出
小学校から中学校、ところによっては高校まで お昼休みに校内放送で、放送委員が音楽とかおしゃべりとか流してましたよね。 最近は自分でもラジオができるようになって、そのクオリティもすごいことになっていると聞きます。
-
strcmp関数などでの複数の文字列の比較
C言語・C++・C#
-
NULLの定義について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列にアルファベットが何文...
-
awk で右端の文字を1文字削除...
-
C言語について。
-
Accessのクエリで、replace関数...
-
C言語について。
-
◆COUNTIF関数またはダブルクォ...
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excel VBA、 別ブックの最終行...
-
Excelのマクロについて
-
JAVA 入れ子MAPの取得時の書き...
-
ユーザーフォームのテキストボ...
-
ヤフーファイナンス 株価時系...
-
DataGrdViewに関連付けたデータ...
-
Excelで指定した日付から過去の...
-
Excel VBA 複数選択したリスト...
-
VBA実行後に元のセルに戻りたい
-
VB.NETで DataRow()を利用して...
-
Excelのプルダウンで2列分の情...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのクエリで、replace関数...
-
文字列の後ろから必要分だけ削...
-
ダブルクォーテーションを文字...
-
文字列にアルファベットが何文...
-
UNICODE文字が含まれているかの...
-
エクセル関数で記号から記号の...
-
strcmp( )関数について教えて...
-
vb.net IVSの漢字を1文字切り...
-
URLで使える文字・使えない...
-
VBScriptでXcopyしたいのですが
-
C言語でギリシャ文字は使えます...
-
awk で右端の文字を1文字削除...
-
右から何文字目にあるか文字位...
-
GetDlgItemTextについて
-
C言語について。
-
VB2008 文字列に等間隔にスペ...
-
◆COUNTIF関数またはダブルクォ...
-
お願いです!!
-
vbsの文字列代入
-
VS C++6.0のCString にて先頭1...
おすすめ情報