請問關於字串處理的函式那邊有的看呢? |
尚未結案
|
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
|
ldd
一般會員 發表:12 回覆:62 積分:19 註冊:2004-07-06 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
qubeley2004 Ansistring使用方法大全(轉自ChinaBCB) http://dev.csdn.net/article/30/30040.shtm 作者:Blog 原文為簡體,下文為繁體。 Ansistring 轉 char 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "哈哈"; char *chr = Test.c_str(); } char轉Ansistring 代碼: #include 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。 } 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 ); } Tclor轉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,相同!沒有分大小寫,哈哈 } 在AnsiString中尋找字元 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "ABCDEF"; AnsiString Sample = "E"; int Result = Test.Pos( Sample ); //返回5,如果你寫Sample="haha",就返回0,找不到,哈哈 } 在AnsiString中找字串,和上一個類似 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "ABCDEF"; AnsiString Sample = "EF"; int Result = Test.Pos( Sample ); //返回5,即E字元的位置 } 判斷字串長度,類似vb的len 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "拿金幣來"; int Len = Test.Length(); //返回8 } 取得字串,類似vb的left 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "小蘋果然看了這篇文章"; AnsiString SLstr = Test.SetLength(6); //得到"小蘋果" } 檢測雙位元組字串 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString ChkStr = "你好"; int ChkPos = 1 ; if ( ByteType( ChkStr , ChkPos ) == mbSingleByte ){ Edit1->Text="0"; } else{ Edit1->Text="1"; }//返回1,如果你寫ChkStr="fxxk",就返回0 } 檢測空字串 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = ""; bool chk = Test.IsEmpty(); if (chk ) Edit1->Text="1";//返回1 } 全部變小寫vs全部變大寫 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "ABCdef"; AnsiString Lstr = Test.LowerCase(); } 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = "ABCdef"; AnsiString Ustr = Test.UpperCase(); } 類似vb中Trim 的去空格函數 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = " ABCDEF "; AnsiString TLstr = Test.TrimLeft(); AnsiString TRstr = Test.TrimRight(); AnsiString Tstr = Test.Trim(); } 但是,這個處理不了全形的空格 代碼: AnsiString __fastcall TForm1::TrimStr( AnsiString Tm , AnsiString LR ) { // LR ... L:左除去 R:右除去 B:dou除去 int len; // 左除去 if ( LR == "L" || LR == "B" ) { len = Tm.Length(); while ( Tm.SubString(1,1) == " " || Tm.SubString(1,2) == " ") { // 半形除去 if ( Tm.SubString(1,1) == " " ){ Tm = Tm.SubString(2,len); len = Tm.Length(); } // 全形除去 else if ( Tm.SubString(1,2) == " " ){ Tm = Tm.SubString(3,len); len = Tm.Length(); } } } // 右除去 if ( LR == "R" || LR == "B" ){ len = Tm.Length(); while ( Tm.SubString(len,1) == " " || Tm.SubString(len-1,2) == " " ){ // 半形除去 if ( Tm.SubString(len,1) == " " ){ len = Tm.Length(); Tm = Tm.SubString(1,len-1); len = Tm.Length(); } // 全形除去 else if ( Tm.SubString(len-1,2) == " " ){ len = Tm.Length(); Tm = Tm.SubString(1,len-2); len = Tm.Length(); } } } return Tm; } void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Test = " 拳腳 "; AnsiString Ret = TrimStr(Test,"B") } 相同字元重復輸入 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Soc = AnsiString::StringOfChar( '*' , 100 ); Edit1->Text=Soc ;//顯示100個* } 字串替換 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Str = "Borland C Builder is free"; AnsiString From = "C Builder"; AnsiString To = "Delphi"; AnsiString Result; Result = StringReplace( Str, From, To, TReplaceFlags() << rfReplaceAll << rfIgnoreCase ); //<<後是參數,得到Borland Delphi is free } 全形變半形 代碼: AnsiString Zen = "1234567890"; int Len = Zen.Length(); char buf[MAX_PATH]; ZeroMemory( buf, sizeof( buf ) ); LCMapString( GetUserDefaultLCID(), LCMAP_HALFWIDTH, Zen.c_str(), Len, buf, sizeof( buf ) ); AnsiString Han = AnsiString( buf ); Edit1->Text=Han; 半形變全形 代碼: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Han = "1234567890"; int Len = Han.Length(); char buf[MAX_PATH]; ZeroMemory( buf, sizeof( buf ) ); LCMapString( GetUserDefaultLCID(), LCMAP_FULLWIDTH, Han.c_str(), Len, buf, sizeof( buf ) ); AnsiString Zen = AnsiString( buf ); } AnsiString重載了"[]"運算符,可以將內容當做字元陣列一樣操作,不過和char[]不同的是AnsiString的[]運算符的下標是從1開始的, 和Delphi的String 相容。對於長度不大的AnsiString可以直接使用[]來操作,長度大的時候最好轉換成char*在使用, 因為重載是通過成員函數實現的,增加了系統的調用開銷。 如: 代碼: AnsiString Temp = "這是一個測試的AnsiString"; int Length = Temp.Length(); for(int i = 1; i <= Length;i ) { if(Temp[i] > 128) { //........ //篩選其中的漢字; i ; } else { //......非漢字的字元。 } } 對於長度小的AnsiString不必要使用c_str()轉換成C的字串來操作。 AnsiString的構造函數有一下幾種: 代碼: __fastcall AnsiString(); __fastcall AnsiString(const char* src); __fastcall AnsiString(const AnsiString& src); __fastcall AnsiString(const char* src, unsigned char len); __fastcall AnsiString(const wchar_t* src); __fastcall AnsiString(int src); __fastcall AnsiString(double src); __fastcall AnsiString(char src); __fastcall AnsiString(short); __fastcall AnsiString(unsigned short); __fastcall AnsiString(unsigned int); __fastcall AnsiString(long); __fastcall AnsiString(unsigned long); __fastcall AnsiString(__int64); __fastcall AnsiString(unsigned __int64); __fastcall AnsiString(const WideString &src); 第一個是缺省構造函數,就是生命一個AnsiString的時候使用的,比如 代碼: AnsiString Str1; 第二個是將字串常量或者字元陣列或者字元指標轉換成AnsiString的構造函數,他是根據C字串的規則進行構造, 即以第一個遇到的'\0'字元作為結束字元的。常見的應用是 代碼: AnsiString Str2 = "TestString"; 第三個是標準的拷貝構造函數,當執行一個賦值操作的時候實際上就是使用了這個構造函數。 第四個是指定了長度和源的構造函數,他和第二個不同的是,不是以'\0'字元作為結束字元的,而是按照指定的長度為准, 這個構造函數可以突破C語言中字串的限制和不足,可能在實際中更具使用價值,大多數的API返回的都是char*, 但並不一定都是可視的字元,也可能包含了'\0',就可以使用這個構造函數來實現對內容的拷貝,儘管第二個參數是unisgned char類型, 但是實際中使用好像可以突破256的限制,在一定意義上將這個構造函數可以是我們在使用BCB的時候避免使用new來分配char類型的陣列資料 ,在一個局部的應用中,使用AnsiString保存臨時的char陣列資料,不需要考慮在什麼異常的情況下需要釋放記憶體, 因為超出作用域的時候,AnsiString是可以自己釋放的。 第五個構造函數可以是的AnsiString可以直接和wchar_t*進行轉換,就是可以直接將w_chart*使用=賦值給AnsiString類型。 第六個是將整型轉換為字串的構造函數,也就是可以直接將一個int類型的值賦給AnsiString,其結果和通過IntToStr賦值一樣的。 如: 代碼: int Temp = 46573284; AnsiString Str3 = IntToStr(Temp); 和 AnsiString Str4 = Temp; 結果是一樣的。 第七個至第十五個和第六個類似,作用也相當。 第十六個是將Windows的WideString轉換為AnsiString的構造函數,也就是可以直接將WideString賦值給AnsiString, 而不需要使用其他的方法或者API進行轉換,功能和AnsiString(wchar_t*)類似。 String和string是不同的,string是標準從c++支援的處理字串的類,在c 裏我們經常這樣使用string 代碼: cout<Andy Chang
------
Andy Chang |
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |