//Ansistring 轉 charvoid __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString Test = "哈哈"; char *chr = Test.c_str();}//char轉Ansistring#include <windef.h>void __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString str = "Sample"; char chr[MAX_PATH]; strcpy( chr , str.c_str() );}//Bool轉AnsiStringvoid __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString Test=BoolToStr(CheckBox1->Checked);}//Ansistring轉boolvoid __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString Test="-1" CheckBox1->Checked= StrToBool( Test );}//int轉ansistringvoid __fastcall TForm1::Button1Click(TObject *Sender){ int i = 123; AnsiString str = IntToStr( i );}//AnsiString轉doublevoid __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString Test = "123"; long double d = StrToFloat( Test );}//double轉AnsiStringvoid __fastcall TForm1::Button1Click(TObject *Sender){ double d = 123.456; AnsiString str = FloatToStr( d );}//double轉AnsiString並四捨五入void __fastcall TForm1::Button1Click(TObject *Sender){ long double d = 123.456121212; AnsiString str = FloatToStrF( d , ffFixed ,5 , 4 );//說明FloatTostrF裡5代表從第幾個數位後一位開始四捨五入,4代表取4位小數。//執行後得到str是123.4600。:roll:}//double轉AnsiString使用類似vb的format函數void __fastcall TForm1::Button1Click(TObject *Sender){ double d = 123.456; AnsiString str = FormatFloat( "000000.00" , d );} //得到 000123.45,當然你可以使用"# . , ; E+ E- xx"等符號,你自己試試 //AnsiString轉Tclor型void __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString Test = "0x00FF8080"; TColor Col = StringToColor( Test );}//Tcolor轉AnsiStringvoid __fastcall TForm1::Button1Click(TObject *Sender){ TColor Col = 0x00FF8080; AnsiString str = ColorToString( Col );}//消除AnsiString 中的一部分字串 代碼:void __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString Test = "ABCDEF"; int First = 3; // 消除制定開頭 int Length = 2;// 消除制定長度 AnsiString Dstr = Test.Delete( First , Length );}//得到ABEF//在AnsiString 中插入字串void __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString Test = "ABCDEF"; AnsiString Ins = "12345"; // 插入串 int Pos = 3; // 在哪插 AnsiString Istr = Test.Insert( Ins , Pos );//得到AB12345CDEF}//取得ansi某一位字元void __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString Test = "ABCDEF"; AnsiString Npos = Test[3];//得到C}//取得AnsiString裡最後一個字元void __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString Test = "ABCDEF"; char *Lstr = Test.AnsiLastChar();//得到F}//取出AnsiString字元,這個類似vb的mid函數!void __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString Test = "ABCDEF"; int First = 3; // 3開始取 int Length = 2;// 取2位 AnsiString Getstr = Test.SubString( First , Length );//得到CD} //AnsiString的字母比較void __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString Test = "ABCDEF"; AnsiString Sample = "abcdef"; int Result = Test.AnsiCompare( Sample );//返回1,不同!分大小寫。}void __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString Test = "ABCDEF"; AnsiString Sample = "abcdef"; int Result = Test.AnsiCompareIC( Sample );//返回0,相同!沒有分大小寫,哈哈}
unsigned char *c1=(str).c_str();
說了多少遍了,不要這樣用。
先不說AnsiString和char*的問題,我覺得初學者首先要記住的就是對記憶體的管理,大多數情況下誰分配(new)的就由誰來釋放(delete)。
AnsiString是一個類(class),它在內部實現了對記憶體的管理,使用者不必去理會。
char*是一個指標(pointer),指向一塊記憶體,所以使用者必須負責它的分配和釋放。
AnsiString.c_str() 返回的是類實體所管理的記憶體,第1這個地址可能會改變,第2對塊記憶體的操作可能會破壞類的結構。
不使用中間變數只是一個習慣問題,並不是一定不能這麼做,至少在文法是沒有問題的。
就像把變數都命名為a,b,c...一樣,雖然可以,但不建議這樣做,也幾乎沒有程式這樣做,除了一些不友好的小例子。