字元轉小寫問題 |
尚未結案
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
請教各位前輩. 字元轉小寫的函數有:
AnsiLowerCase, LowerCase, StrLower
請問AnsiLowerCase和LowerCase有何區別?
StrLower是用于PChar資料形態的, 小弟以下的程式碼出錯, 請問是何原因?
Var MyString : PChar; begin Try MyString := 'DELPHI IS GOOD'; ShowMessage(String(StrLower(MyString))); Except On MyError: Exception do ShowMessage(MyError.ClassName #10#13 MyError.Message); end; end;再請問PChar形態轉字串形態方法及字串形態轉PChar的方法. 現在才開始看Object Pascal, 不知道會不會太晚了... 感謝! <><>===================== 努力,相信會獲得美麗! 忻晟>> 發表人 -
------
忻晟 |
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
function AnsiLowerCase(const S: string): string; Description AnsiLowerCase returns a string that is a copy of the given string converted to lower case. The conversion uses the current locale. This function supports multi-byte character sets (MBCS).
------
︿︿ |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
但是前輩, 還是不行, 如下程式碼, 會出現:EAccessViolation錯誤信息.
procedure TForm1.Button1Click(Sender: TObject); Var MyString : PChar; begin Try MyString := 'DELPHI IS GOOD'; ShowMessage(StrLower(MyString)); Except On MyError: Exception do ShowMessage(MyError.ClassName #10#13 MyError.Message); end; end;謝謝! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
引言: procedure TForm1.Button1Click(Sender: TObject); // Pchar 只是一個指標 ,你需先 配置 記憶體空間 Var MyString : STRING; begin Try MyString := 'DELPHI IS GOOD'; ShowMessage(StrLower(Pchar(MyString))); Except On MyError: Exception do ShowMessage(MyError.ClassName #10#13 MyError.Message); end; end;但小弟執行同樣的程式碼, 也會出現這個錯誤信息. 感謝指教! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
感謝前輩指點﹐前輩的方法可行﹐不過﹐@的意義是什么﹖ 另外小弟試了一下﹐發現﹕
Var MyString : String; begin Try MyString := 'DELPHI IS GOOD'; ShowMessage(StrLower(Pchar(MyString))); Except On MyError: Exception do ShowMessage(MyError.ClassName #10#13 MyError.Message); end; end; 會出現上述的錯誤信息﹐但當小弟利用Edit元件的Text屬性來指定String值﹐就可正常Run了﹐如下﹕ Var MyString : String; begin Try MyString := 'DELPHI IS GOOD'; Edit1.Text := MyString; ShowMessage(StrLower(Pchar(Edit1.Text))); Except On MyError: Exception do ShowMessage(MyError.ClassName #10#13 MyError.Message); end; end;請問這是什么原因呢﹖以上MyString和Edit1.Text都是String形態﹐為何前者不行﹐而后者可行呢﹖ 感謝﹗ ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/09/13 12:44:25
------
忻晟 |
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
不過﹐@的意義是什么﹖ @ 是 位址的意思 , 相當於 C 的 & 在HELP上有一段話是這樣說的
If the source string contains international characters, use AnsiStrLower instead. If the source string is a Pascal string, use LowerCase (or AnsiLowerCase) instead. 所以說 Pascal string 可以使用 LowerCase or AnsiLowerCase 來轉換成小寫 至於 StrLower 為什麼會錯 請看下列內容
function StrLower(Str: PChar): PChar; assembler;
asm
PUSH ESI
MOV ESI,Str
MOV EDX,Str
@@1: LODSB
OR AL,AL
JE @@2
CMP AL,'A'
JB @@1
CMP AL,'Z'
JA @@1
ADD AL,20H
MOV [ESI-1],AL
JMP @@1
@@2: XCHG EAX,EDX
POP ESI
end;
------
︿︿ |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |