- PR -

文字列の比較について

1
投稿者投稿内容
さな
ベテラン
会議室デビュー日: 2004/07/27
投稿数: 59
お住まい・勤務地: 大阪・肥後橋
投稿日時: 2005-05-12 14:19
いつも、活用させていただいています。
さなです。
C#.Netで文字列の比較をしたいのですが、以下のコードを実行した場合、意図した結果が得られません。
string stra = "A";
int Result = stra.CompareTo("a");
とした場合、文字コードでは A < a が成立するので、Result には -1 が帰って来てほしいのですが、1 ( A > a ) という結果が返ってきます。
C#.NETの CompareTo は C言語などのstrcompの代用としては使えないのでしょうか?
C#.NET CompareTo -- aAbBcC の順
C言語 strcomp -- ABC…abc の順

CompareOrdinal だと、上記比較であれば -32 が帰ってくるので、これを使うしかないでしょうか?
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-05-12 14:31
どもです。がると申します。
んっと…
引用:

string stra = "A";
int Result = stra.CompareTo("a");
とした場合、文字コードでは A < a が成立するので、Result には -1 が帰って来てほしいのですが、1 ( A > a ) という結果が返ってきます。


これですが、厳密には「ASCIIコード依存」ですよね?
C言語のstrcmp(3)もそうですが。基本的には0かnot0か、以上の意味合いを
持たせるのは、環境依存が激しいので非常に危険だと思うのですが
どうでしょう?
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2005-05-12 15:09
引用:

がるがるさんの書き込み (2005-05-12 14:31) より:
これですが、厳密には「ASCIIコード依存」ですよね?
C言語のstrcmp(3)もそうですが。基本的には0かnot0か、以上の意味合いを
持たせるのは、環境依存が激しいので非常に危険だと思うのですが
どうでしょう?


C言語のstrcmpはどうだったか忘れてしまいました。
単純なchar値の大小比較でしたっけ?

.NET Frameworkでは基本Unicodeですから、CompareOrdinalではUnicode値?での引き算値ですかね?
格納されているSystem.Char値の比較で、少なくとも大小順序は決まっています。
ASCIIとUnicodeの値が同じになっているので同じ動作とみなして使うことには問題ないと思います、多分。
※いや、私あんまりこの辺は明るくないので、おかしなこと言ってるかもしれません。

CompareやCompareToに関しては、カルチャを意識しますから、基本は小文字<大文字になっているみたいですね(この順序もカルチャ依存?てわけではなさげ…?)。

結局のところCompareOrdinalを使う必要があると思います。
1

スキルアップ/キャリアアップ(JOB@IT)