線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1413
推到 Plurk!
推到 Facebook!

字元轉小寫問題

尚未結案
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-12 23:22:14 IP:63.84.xxx.xxx 未訂閱
請教各位前輩.    字元轉小寫的函數有: 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-13 00:25:08 IP:61.70.xxx.xxx 未訂閱
Var MyString : string; p:PChar; begin Try MyString := 'DELPHI IS GOOD'; p:=PChar(MyString); ShowMessage(StrLower(p)); Except On MyError: Exception do ShowMessage(MyError.ClassName #10#13 MyError.Message); end; end;
------
︿︿
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-13 00:35:31 IP:63.84.xxx.xxx 未訂閱
謝謝cmj前輩指點.    剛才發現AnsiLowerCase也可直接用在PChar形態的資料上, 不需要做轉換. 感謝前輩!    ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/09/13 00:37:33
------
忻晟
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-13 00:52:50 IP:61.70.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-13 00:58:10 IP:63.84.xxx.xxx 未訂閱
但是前輩, 還是不行, 如下程式碼, 會出現: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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-13 01:06:00 IP:61.70.xxx.xxx 未訂閱
ERROR 發表人 - cmf 於 2003/09/13 11:28:54
------
︿︿
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-13 01:18:17 IP:63.84.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-13 01:26:45 IP:61.70.xxx.xxx 未訂閱
11 發表人 - cmf 於 2003/09/13 02:05:58
------
︿︿
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-13 01:53:29 IP:61.70.xxx.xxx 未訂閱
拍謝 拍謝 以下 我以測試過了 OK procedure TForm1.FormClick(Sender: TObject); Var MyString : STRING; P:Pchar; begin MyString := 'DELPHI IS GOOD'; P:=@MyString[1]; p:=StrLower(p); ShowMessage(P); end; 發表人 - cmf 於 2003/09/13 11:43:24
------
︿︿
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-13 12:30:44 IP:63.84.xxx.xxx 未訂閱
感謝前輩指點﹐前輩的方法可行﹐不過﹐@的意義是什么﹖ 另外小弟試了一下﹐發現﹕
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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-13 12:55:36 IP:61.70.xxx.xxx 未訂閱
不過﹐@的意義是什么﹖ @ 是 位址的意思 , 相當於 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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-09-13 13:29:25 IP:63.84.xxx.xxx 未訂閱
感謝cmf前輩的指點!    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
系統時間:2024-05-09 7:22:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!