1. 程式人生 > >Ansistring的型別轉換與使用

Ansistring的型別轉換與使用

//Ansistring 轉 char
void __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轉AnsiString
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test=BoolToStr(CheckBox1->Checked);
}
//Ansistring轉bool
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test="-1"
                    CheckBox1->Checked= StrToBool( Test );
}
//int轉ansistring
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int i = 123;
    AnsiString str = IntToStr( i );
}
//AnsiString轉double
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "123";
    long double d = StrToFloat( Test );
}
//double轉AnsiString
void __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"等符號,你自己試試 :wink:
//AnsiString轉Tclor型
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Test = "0x00FF8080";
    TColor Col = StringToColor( Test );
}
//Tcolor轉AnsiString
void __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...一樣,雖然可以,但不建議這樣做,也幾乎沒有程式這樣做,除了一些不友好的小例子。