
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言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- Visual Basic(VBA) 違う文字のみ色を塗る方法がわかりません。。 G列とH列のに文字が入っています。 例えばG5とH5の文 3 2022/06/03 17:13
- Excel(エクセル) エクセルの日付から年末尾2桁と月を1月をA~Lに変換したい 3 2022/08/08 10:32
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- Visual Basic(VBA) 比較して等しくなかったらセルを赤くする 4 2022/07/19 20:11
- 統計学 t検定を繰り返してはいけない理由について教えて下さい。 2 2022/05/15 12:37
- 教えて!goo このサイトで専門用語で質問して専門用語が分かる回答者を期待したが回答が得られない その例として例えば 4 2023/05/06 22:29
- Excel(エクセル) 配列操作について 5 2023/04/18 07:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
Excelオートフィルター機...
-
Python Django csv について
-
VBAでの Replace関数で、ワイル...
-
指定した文字の前の数字を取り出す
-
文字列の最後の文字を置き換え...
-
結局、HTML5でクリップボードに
-
テキストエディタで複数行にわ...
-
VBA 1つのセルに入っている値の...
-
firefoxで、特定の文字列を含む...
-
エクセル マクロ 右側のスラッ...
-
10個の文字から4文字選んででき...
-
アドレスでの参照の仕方
-
EXCELで=より左の文字を一括で...
-
エクセルで文字列の最大値を抽...
-
MessageBoxが表示されないのは何で
-
VBA2005 16進を2桁で表示したい。
-
変数内に入った文字列の結合 UWSC
-
StringGridで選択した箇所の文...
-
文字列ファイル表示プログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
エクセルで文字列をtxtファイル...
-
【Excel VBA】複数ある特定の文...
-
エクセル 数値データを桁をそ...
-
Excelで3E8を3.00E+8にしない方...
-
VBA2005 16進を2桁で表示したい。
-
エクセルで文字列の最大値を抽...
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
Excelで指数表現しないようにす...
-
MS SQLServer のSQLで文字列の...
-
VBの「As String * 128」とは?
-
エクセルでセル内の文字列の最...
-
ORCLEでの小数の表示方法の変更...
-
bashスクリプトでの文字列から...
-
LEFT関数で文字数を指定しない...
-
アクセスで特定の数字以外(複...
おすすめ情報