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

請問ansistring轉成string有這樣的函數嗎???

尚未結案
qubeley2004
一般會員


發表:52
回覆:71
積分:24
註冊:2004-07-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-27 16:02:01 IP:211.76.xxx.xxx 未訂閱
請問ansistring轉成string有這樣的函數嗎??? Edit1->Text...這樣的都是ansistring 可是我想要轉成string這樣 string a; a=Edit1->Text; 結果他不給轉...說有錯誤...
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-27 16:17:17 IP:211.20.xxx.xxx 未訂閱
String a; S要用大寫
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-27 23:08:22 IP:211.76.xxx.xxx 未訂閱
qubeley2004你好:     用string a = Edit1->Text.c_str();     還有String就是AnsiString...換湯不換藥..
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-28 01:24:05 IP:61.142.xxx.xxx 未訂閱
qubeley2004: 我忘了是誰的文件,如是原說明者請出面讓我說聲對不起我忘了你: AnsiString 其實是一個類(class),不過,它並不歸屬於VCL的框架,不是派生於TObject. 該類封裝了C,C 裏字串的大多操作,並有所發展。方便了C 程式師在程式中使用字串。下面挑典型和重要的說。 一、String就是AnsiString.typedef AnsiString String; 二;在VCL,幾乎所有字串都是AnsiString。若是屬性,則有要求, = 的重載對屬性不保證一定起作用。 Form1->Caption = "窗口標題"; //OK Form1->Caption = " - 世界你好"; //Err Form1->Caption = Form1->Caption " - 世界你好"; //OK 同樣的事情發生 >>(移出) 或 << (移入) 重載上。如字元: this->Font->Style >> fsBold; //不行的 三、如果要用空串,最好不用 ""; 而是:AnsiString emptyStr = *NullStr; 四、現在你不用(顯式地)爲字串管理記憶體了: AnsiString name = "Mike"; ShowMessage(name); //顯示Mike name = "張三"; ShowMessage(name); //顯示張三 AnsiString name2 = name; name = 李四"; ShowMessage(name); ShowMessage(name2); AnsiString twoName = name name2; ShowMessage(twoName); 上面其實說明了,AnsiString 重載了 = 和 操作符,讓我們可以直接通過簡單的=或 操作,來賦值,改變一個字串。 如果不用Ansistring這樣或類似的而在C,C ,同樣的操作將是類似於(並不一定和上面完全一致的過程): char* name = "Make"; ShowMessage(name); name = new char[strlen("張三") 1]; stcpy(name, "張三"); ShowMessage(name); char* name2 = new char [strlen(name1) 1); strcpy(name2,name); delete[] name; name = new char[strlem("李四") 1]; strcpy(name,"李四"); ShowMessage(name); ShowMessage(name2); char* twoName = new char [strlen(name) strlen(name2) 1)]; strcpy(twoName,name); strcat(twoName,name2); ShowMessage(twoName); delete[] twoName; delete[] name2; delete[] name; 肯定可以看出後者在記憶體管理(初始分配,擴容,連接,釋放)上的一堆瑣事。當然,可以考慮用純C的 malloc,realloc, free ,及 sprintf連減少一些操作,但在C 世界裏,這樣的記憶體管理會和使用new,new[] , delete,delete[]的代碼在交接上産生問題。並不是C 程式師的首選。 可能還會說,我就是原意累點,可是直接寫記憶體管理,會帶來高效率啊。。這是不知量力。由於字串管理在一個程式中的使用率太高了,事實上不管是VC的CString, 還是STL的string,或者是C#的string,及我們這裏的AnsiString,統統採用記憶體池,及“realloc on modify(在修改時才生分配記憶體)”等技術,可謂既提高了連續記憶體使用率,又提高了運行速度,這類高級功能,不是一般你我有精力甚至能力去實現。 四、小心,AnsiString 帶有Pascal風格。 AnsiString這個類也重載 [] 操作符 ,用於得到字串中指定的字元,可是,雖然AnsiString純是用C 寫成,但它是爲了實現Object Pascal內置類型string,所以必須和Object Pascal保持相容,所以,它的下標也是從1開始: AnsiString pascal = "Pascal"; char c = pascal[1]; // c 是 'P' 五、可以得到C風格的字串。 Windows在編程介面上還是非面向物件,(等.Net完全取代後,就是了) 它的API還得用到很多的C風格的字串(上面我們舉例的那個);再者,C 既然說完全相容C,那我們難免有時還會喜歡用用C的函數庫。 AnsiString s = "123456"; int len = strlen(s.c_str()); 沒錯, c_str() 這個成員函數返回的是一個 const char* 常量字串指標。 因爲是const的,所以用在類似strlen()這樣僅要求是const char* 的函數還算方便,如果你想安全一點,或者人家函數指定就不能是const ,那你只好複製走: AnsiString s = "123456"; char* tmp = new char[7]; strcpy(tmp, s.c_str()); //複製 然後對tmp愛幹嘛幹嘛去。 六、它有好多字串操作成員函數,並一般都有對應的同名全局函數。 比如取長度: AnsiString s = "Hello!"; int len = s.Length(); //求長度 但你也可以這樣: int len = Length(s); 或例如求子串: string subString = s.SubString(2,3); ShowMessage(subString) // "ell" 同樣用個全局的SubString(s,2,3); 注意了,索引從1開始。 Andy Chang
------
Andy Chang
系統時間:2024-04-25 7:01:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!