Stringクラスをキャストするには?

解決


ひで  2005-01-08 00:51:58  No: 55931

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

環境
OS;XP、VC++.NET 2003 フォームアプリケーション(.NET)

S"0"をbool型(true)に変換したいのですが、なにか方法はないでしょうか。
宜しくお願いします。


シャノン  2005-01-08 03:32:05  No: 55932

どのような変換基準ですか?
S"false" なら false、それ以外は true になるとか、
空文字列なら false、それ以外は true になるとか…
S"0" が true で、その他の文字列はどうなるんですか?

厳密に一般化された変換規則が無いと、答えられないと思います。


ひで  2005-01-08 04:43:55  No: 55933

お返事ありがとうございます。

S"0"をbool型(true)  ←  間違ってました。bool型(false)でした。

>厳密に一般化された変換規則が無いと、答えられないと思います。
確かにそうですね、一般化された変換規則として
true ⇒ 1
false ⇒ 0
と思っていたので、そうであるならば、S"0"をキャストしてbool型(false)にできないかと思ってお聞きしました。


シャノン  2005-01-08 19:01:16  No: 55934

#ちょっとしつこく書いてみます

> 確かにそうですね、一般化された変換規則として
「一般化」と「一般的」は違いますのでご注意を。
「一般的には〜」は「普通は〜」と同義ですが、「一般化」とは、その規則がどのような場合にも通用するようにすることです。

"0" は false、"1" は true。
では "2" は? "3" は? "う゛ぃしぃぷらぷら" は? となってしまいます。
これは変換規則が "0" と "1" の場合にしか通用していないので、「一般化されていない」状態です。

大抵、プログラミングにおいて真偽を決めるときは、あるものを「偽」と決め、それ以外を全て「真」とします。
C++ では 0 が偽なので、それ以外… 1 も 2 も 3 も 8641 も -4 も、すべて真です。
ですから今回は "0" が false、それ以外が true ということになるのでしょうか。
もちろん、"0" が false、"1" が true、それ以外は変換不能として例外で落とす、という設計も可能です。
これなら、あらゆる値に対応できる変換規則になったので「一般化された」状態です。

で、本題ですが。
String::Equals で比較するだけですね。
まず "0" と比較し、同じだったら false に確定。
その後で、それ以外の全てを true とみなすか、さらに S"1" と比較して…を行うかは設計次第ということで。


ひで  2005-01-19 18:14:09  No: 55935

丁寧な解説どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加