全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3497
推到 Plurk!
推到 Facebook!

請問AnsiCompare的 0/1 問題,跟if的true/false的對映問題

答題得分者是:Stallion
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-03 22:12:54 IP:220.132.xxx.xxx 訂閱
各位先進大家好
敝人最近在摸bc6,
有一個新手級的疑問:
AnsiCompare的結果為"0"的話,表示兩字串相等,
可是一般if的條件來說,非0為true,0者為false
書上的例子是
if(orgStr.AnsiCompare(deststr){
ShowMessage("orgStr equals deststr);
}
這兩者是不是有衝突?各位先進對這點的看法如何?
先在此說一感謝了
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-03 22:24:40 IP:211.22.xxx.xxx 未訂閱
C++的if ( expression ) 條件式,其中的 expression 只要不為0,不管是正值或負值,結果都為真。
查了一下 int __fastcall AnsiCompare(const AnsiString& rhs) const;
De scription
Compares this AnsiString to rhs, with case sensitivity. The compare operation is controlled by the current Windows locale and is not necessarily the same as using the AnsiString comparison operators. AnsiCompare is based on a locale-specific collating order. The return value is shown below:

Condition Return Value
S1 > S2 > 0
S1 < S2 < 0
S1 = S2 = 0
因此原書的寫法應該有誤謬~要寫成
if ( orgStr.AnsiCompare(deststr) == 0 )
{
ShowMessage("orgStr equals deststr);
}
===================引 用 neoart 文 章===================
各位先進大家好
敝人最近在摸bc6,
有一個新手級的疑問:
AnsiCompare的結果為"0"的話,表示兩字串相等,
可是一般if的條件來說,非0為true,0者為false
書上的例子是
if(orgStr.AnsiCompare(deststr){
ShowMessage("orgStr equals deststr);
}
這兩者是不是有衝突?各位先進對這點的看法如何?
先在此說一感謝了
編輯記錄
Stallion 重新編輯於 2007-06-03 22:25:42, 註解 無‧
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-03 22:32:50 IP:220.132.xxx.xxx 訂閱
thanks,
是書筆誤沒錯(可能是想當然爾的後果)
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-03 22:51:43 IP:61.225.xxx.xxx 未訂閱
其實。它有它的用法。
這是有歷史的。

通常我們寫都會 if (true).....
那我們換個角度。如果說有個 flag 它叫做 end.
也就是 bool end

當 走到檔案結束時 end == true
那這時候。我們是不是都會想用
while (!end)
or
if (!end)
這種做法?
而 strcmp 也是用這種想法產生的。
有時候去想當年的歷史,就會知道為什麼這樣玩了。只是新加入者會比較累一點。
===================引 用 neoart 文 章===================
各位先進大家好
敝人最近在摸bc6,
有一個新手級的疑問:
AnsiCompare的結果為"0"的話,表示兩字串相等,
可是一般if的條件來說,非0為true,0者為false
書上的例子是
if(orgStr.AnsiCompare(deststr){
ShowMessage("orgStr equals deststr);
}
這兩者是不是有衝突?各位先進對這點的看法如何?
先在此說一感謝了
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-03 23:22:11 IP:220.132.xxx.xxx 訂閱
歹勢,一題多問
請問實務中,如果用到多語系或是其他少用字(如"堃"字)
在BCB6中
AnsiString夠用嗎?
還是有其他字串資料型態可以應付我的需求?
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-06-03 23:26:17 IP:211.22.xxx.xxx 未訂閱
輸入法打的出來,但是要看你用來顯示的元件支不支援Unicode ?如果支援,那麼那個元件所使用的字型要支援Unicode,並且字串變數使用WideString比較好。
===================引 用 neoart 文 章===================
歹勢,一題多問
請問實務中,如果用到多語系或是其他少用字(如"堃"字)
在BCB6中
AnsiString夠用嗎?
還是有其他字串資料型態可以應付我的需求?
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-06-03 23:30:38 IP:220.132.xxx.xxx 訂閱
Thanks
看樣子就unicode 之於GUI部分.只有用BCB2005這類比較後來的版本才支援了( ? )
公司就是因為不想花時間每台安裝.net架構(88mega...有夠大的),才反頭來寫BCB的
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-06-03 23:34:29 IP:211.22.xxx.xxx 未訂閱
據我所知!Borland的產品到現在好像都還沒支援Unicode?
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-06-04 05:18:17 IP:203.73.xxx.xxx 訂閱
neoart大好像比較少用BCB/Delphi?
BCB2005之後支援Unicode要在.net的版本,他在Win32的部份依舊是沒有Unicode支援的
對於Win32 GUI Unicode的支援,現在還是依靠TntWare(要錢的叫TMS Unicode..XD)
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-06-04 08:15:00 IP:220.132.xxx.xxx 訂閱
thanks,
I will try it
(寫java習慣了,寫C 是技術備用罷了,因為有些控制的東西,java不太方便---ex:printer上一些古怪的需求,多少還是要用到一些VC/BC來寫小傢俬的)
系統時間:2024-04-25 8:28:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!