掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.28611

Unicodeにおいて、大文字と小文字を区別しない文字列比較関数
投稿者---GK(2006/10/28 19:42:26)


いつもお世話になります。

題名の通りですが、Unicodeでの大文字と小文字を区別しない文字列比較関数って存在するのでしょうか?

例えばstrcmpは区別しますよね。
これのUnicode版は_tcscmpですが、
strcasecmpに変わるUnicode版の関数が見つからずに困っています。

どなたか分かる方がいらっしゃいましたらよろしくお願いいたします。m(_ _)m


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:Unicodeにおいて、大文字と小文字を区別しない文字列比較関数 28612 yoh2 2006/10/28 20:14:42


No.28612

Re:Unicodeにおいて、大文字と小文字を区別しない文字列比較関数
投稿者---yoh2(2006/10/28 20:14:42)


>例えばstrcmpは区別しますよね。
>これのUnicode版は_tcscmpですが、
>strcasecmpに変わるUnicode版の関数が見つからずに困っています。

_tcscmpといった名前が出てくるということは、開発環境はVisual C++のいずれかの
バージョンでしょうか。(_tcscmpはWindows固有)
VCにはそもそもstrcasecmp()からしてなかったような気が。少くとも、VC++ 2005
Express Editionでは見つかりませんでした。
strcasecmp()はC/C++標準関数ではなくて、POSIX関数(乱暴に言うとUNIXの関数)です。
ワイド文字列版strcasecmp()はwcscasecmp()ですが、当然ながらこれもPOSIX関数です。

ちょっとした突っ込み(その1)
_tなんちゃらといった関数は、UNICODE用ではなく、ビルド設定によってUNICODE版と
MBCS版が自動的に使い分けられるものです。
UNICODE用(Windows用と決まっていないなら、この表現にもちと問題ありますが
-- 突っ込みその2参照)の関数はwcscmp()等、charの代わりにwchar_tを使うように
なっている関数です。

ちょっとした突っ込み(その2)
wchar_tはUNICODEとは決まっていません。C/C++両規格では、具体的な文字コードまで
踏み込まない「ワイド文字」といった表現になっています。
まあ、確かにWindowsではUNICODE(というか、UTF-16LE)ですが。


この投稿にコメントする

削除パスワード

No.28613

Re:Unicodeにおいて、大文字と小文字を区別しない文字列比較関数
投稿者---yoh2(2006/10/28 20:20:59)


と、ひとつ書き忘れていました。

Windows用の、大文字小文字を無視した文字列比較関数は
_stricmp()、_wcsicmp()、_mbsicmp()、_tcsicmp()
です。


この投稿にコメントする

削除パスワード

No.28614

Re:Unicodeにおいて、大文字と小文字を区別しない文字列比較関数
投稿者---GK(2006/10/28 20:45:04)


迅速でご丁寧な解説ありがとうございます。
マルチバイト文字=Unicodeって言うわけじゃなかったんですね。勉強になります。

早速_tcsicmpで試してみましたところうまくいきました。
どうもありがとうございました^^


この投稿にコメントする

削除パスワード

No.28618

Re:Unicodeにおいて、大文字と小文字を区別しない文字列比較関数
投稿者---たかぎ(2006/10/28 22:43:51)
http://takagi.in/


参考までに...

一応、TR 19769: New character types in Cということで、UTF-16を表現するchar16_t型とUTF-32を表現するchar32_t型というのが挙げられています。実用可能になるのはかなり先だと思いますが。

また、あらかじめ定義されたマクロ名として__STDC_ISO_10646__があるなら、その処理系のwchar_t型はISO/IEC 10646ですので、実質的にUnicodeと考えて問題ないでしょう。

まあ、いずれにせよ、【掲示板利用宣言】にもあるように、環境を書くのは必須ということです。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧