
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
コンピュータの中ではあらゆるものが「数値」で表現されるので, もちろん「文字」も対応する「文字コード」で表現される. ただし, C の規格上「どの文字コードを使うか」は規定されておらず, 「ASCII」に限定しているわけではない. 規格上文字コードに対する条件は
・数字 (に対応するコード) は連続する
・ラテンアルファベットはその順に大きくなる
・全て非負
なので, UTF-32 や古式ゆかしい EBCDIC でもかまわない.
なお機能についてコメントしておくと, strcmp(s1, s2) や memcmp(s1, s2, n) は各バイトを unsigned char と解釈し, 先頭バイトからみていって最初に異なるバイトがあったときに
・s1 の方が s2 より大きければ正の値
・s1 の方が s2 より小さければ負の値
を返す. 最後まで同じだったら 0 が返る. いわゆる「辞書式順序」ってやつだ.
実はぎりぎりのケースを考えると案外実装は難しい.
No.4
- 回答日時:
> アスキーコードで比較してるんですか?
C言語の仕様上は規定してない筈です。
要は「文字コード」をどうすっか、ってのはC言語の仕様自体とは別の問題となる。「C言語の仕様範疇外の話」になるんじゃないのかな。
なお、事実上、C言語には「文字列」も「文字」もなく、全部数値だけ、なんで、配列に置いた数値を先頭から比較して、「大小」が生じた時点で打ち切ってそこでの差を返す、って実装になってるんじゃないかな。
例: omeko omanko
両方とも先頭から見ていくとoは同じ(差ナシ)、mも同じ、と来て、3文字目で差がある、と。eとaの文字コード(つまり事実上数値だ)を見て、その差を返してオシマイ、と。
実装上はそういう実装になってるんじゃないのかね、多分。
詳しい話は、JISでC99の仕様書が公開されてるんで読んでみたらいいと思う。
JIS X 3010:2003 プログラム言語C
https://kikakurui.com/x3/X3010-2003-01.html
日本ではいまだに、公式には「C言語」と言うのはISO(国際標準化機構)で定義されてる通称「C99」になっているんで、上の仕様書が「日本でのC言語」です。
(ISOからは今年「C23」が発表される、って話なんだけど、JISがそれに追随するのかどうかはちと分からんです)
No.3
- 回答日時:
>アスキーコードで比較してるんですか?
アスキーコードでかかれた文字列ならそうです
別の文字コードで書かれた文字列なら、その別の文字コードでの比較になりますね
【戻り値】
s1 > s2 で正の値、s1 < s2 で負の値、s1 = s2で 0 を返す。この大小関係は一般に文字コード順による。
No.2
- 回答日時:
>アスキーコードで比較してるんですか?
イメージとしては、それでOKです。
厳密には1バイトのunsigned char の値で比較します。
異なる場合は、その差(第1引数の値-第2引数の値)を返します。
No.1
- 回答日時:
若いころ使ってたけどもう20年ぐらいコード書いてないのであやふやな記憶から回答します。
>strcmpとmemcopの違い
これはstrcmpとmemcmpの違いということかな?
\0までを文字列として比較するか、指定された長さのメモリ領域の内容を比較するかの違いですね。
strcmpよりstrncmpがmemcmpに引数などが似ていますね。
strcmpの比較方法は2つの文字列の先頭から1文字ずつ比べて、同じなら次の文字、、、とヌルまで比較を続けてます。違いが発生したら両方のデータの引き算の結果を返した(ような気がする)のでプラスだったりマイナスだったりします、この結果の値にあまり利用価値はなくて、要は0以外が返されるということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb
- awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな
- 違う文字のみ色を塗る方法がわかりません。。 G列とH列のに文字が入っています。 例えばG5とH5の文
- エクセルの日付から年末尾2桁と月を1月をA~Lに変換したい
- エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい
- perlで2次元配列をサブルーチンに値渡しで渡す
- 比較して等しくなかったらセルを赤くする
- t検定を繰り返してはいけない理由について教えて下さい。
- このサイトで専門用語で質問して専門用語が分かる回答者を期待したが回答が得られない その例として例えば
- 配列操作について
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
プログラミング 素数か素数ではないか判断するプログラミングで、写真のようなプログラミングを打ったとき
C言語・C++・C#
-
c言語の問題の説明、各所ごとに
C言語・C++・C#
-
int16_t の _t は何?
C言語・C++・C#
-
-
4
C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、
C言語・C++・C#
-
5
C言語について。
C言語・C++・C#
-
6
C言語でファクト関数を使わずに階乗を計算する方法はありますか?できれば教えてください
C言語・C++・C#
-
7
Cのオブジェクトファイルの逆アセンブル
C言語・C++・C#
-
8
いまc言語を独学で勉強しているのですがいまいちわかりません。 https://monozukuri-
C言語・C++・C#
-
9
Cのコンパイルでコメントアウトをそのままオブジェクトに保持したい
C言語・C++・C#
-
10
Javaって使いますか、もう古いですか?C++とどっちがいいですか?分析でC++使う授業ありましたけ
C言語・C++・C#
-
11
関数ポインタの高速化のメリット
C言語・C++・C#
-
12
C言語について。
C言語・C++・C#
-
13
c言語
C言語・C++・C#
-
14
大量のデータを読み込んで表示する速度を改善したい
C言語・C++・C#
-
15
アセンブラ指令
C言語・C++・C#
-
16
プログラムについて。
C言語・C++・C#
-
17
C言語について。
C言語・C++・C#
-
18
Cのdoubleの浮動小数点表示について
C言語・C++・C#
-
19
プログラミング 2つの整数を読み込んで、等しければ 「二つの値は同じです」と表示し、そうでなければ,
C言語・C++・C#
-
20
変数のスコープ
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
文字列からタブコードを取り除...
-
エクセルで文字列をtxtファイル...
-
EXCELで=より左の文字を一括で...
-
VBA2005 16進を2桁で表示したい。
-
Excelで3E8を3.00E+8にしない方...
-
sedなどで、特定の文字列の後の...
-
VBの「As String * 128」とは?
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
C#で年月を比較する
-
aaa.bbb.ccc という、「ドット...
-
COUNTA関数は空白に見えるスペ...
-
エクセルで文字列の最大値を抽...
-
Left関数とRight関数を合わせた...
-
エクセル 数値データを桁をそ...
-
【Excel VBA】複数ある特定の文...
-
grepで検索行以外の行を抽出す...
-
MS SQLServer のSQLで文字列の...
-
ORCLEでの小数の表示方法の変更...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
Excelで指数表現しないようにす...
-
sedなどで、特定の文字列の後の...
-
エクセルで文字列の最大値を抽...
-
VBA2005 16進を2桁で表示したい。
-
エクセルで文字列をtxtファイル...
-
MS SQLServer のSQLで文字列の...
-
【Excel VBA】複数ある特定の文...
-
エクセル 数値データを桁をそ...
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
VBの「As String * 128」とは?
-
アクセスで特定の数字以外(複...
-
Windowsでファイルのリネームで...
-
textboxユーザーコントロールの...
-
CStringの文字列検索&抜き出し...
おすすめ情報