中英混雜的字串處理函式 |
|
s1937kk
一般會員 ![]() ![]() 發表:2 回覆:15 積分:8 註冊:2004-11-15 發送簡訊給我 |
大家好,小弟是C / C++的新手
中英混雜的字串是相當常見的
而BCB內建的字串處理函式「好像」沒有可用的函數
所以小弟寫了三個最常用的「中英混雜字串處理函式」
當作是練習吧~ 由於小弟剛學C / C++,用的工具是BCB
對於C++及BCB工具的特性、語法架構不是很熟悉
所以寫的不好的地方請高手指點
如果寫的還可以勉強使用的話,大家就將就用吧@@
以後希望大家多多指教,謝謝^^ 函式名稱:Mid
說明:抓取字串
Mid("字串",開始位置,字數) 函式名稱:InStr
說明:尋找字串
iPos = InStr("被搜尋的字串","搜尋的字串"[,開始位置,是否區分大小寫]); 函式名稱:Len
說明:計算字串長度
iLen = Len("字串"); PS.函式名稱是模仿VB的函式名稱,用過VB的人應該蠻習慣的吧 使用範例:
AnsiString str; int iPos=0,iLen=0; str = Mid("a中b文c字",3,2); //str = b文 iPos = InStr("a中b文c字","b文"); //iPos = 3 iPos = InStr("A中B文C字","b文",1,false); //iPos = 3 iLen = Len("a中b文c字"); //iLen = 6 //函式宣告------------------------------------------------------------------- AnsiString Mid(AnsiString S1,int iStart,int iCount); int InStr(AnsiString S1,AnsiString strSub,int iStart = 1,bool bolCparCase = true); int Len(AnsiString sText); //--------------------------------------------------------------------------- AnsiString Mid(AnsiString S1,int iStart,int iCount) { int iLen = S1.Length(); int iGrabCount=0,iRealCount=0,iRealStart=0,i; int iWordCount=0; short shAscii; char *ch; AnsiString strTemp; if(iStart == 0) iStart=1; for(i=1;i<=iLen;i ) { strTemp = S1.SubString(i,1); ch = strTemp.c_str(); shAscii = short(ch[0]); iWordCount ; if(iWordCount == iStart)iRealStart = i; if(shAscii < 0 ) { if(iRealStart != 0) { iRealCount = iRealCount 2; iGrabCount ; } i ; } else { if(iRealStart != 0) { iRealCount ; iGrabCount ; } } if(iGrabCount >= iCount) break; } return S1.SubString(iRealStart,iRealCount); } //--------------------------------------------------------------------------- int InStr(AnsiString S1,AnsiString strSub,int iStart,bool bolCparCase) { int i,j; AnsiString cS1,cSub; int iPos=0; bool bolIsMatch=true; char *ch; if (iStart == 0) { iStart = 1; } else if(iStart > S1.Length()) { iStart = S1.Length(); } if (bolCparCase == false) { S1 = AnsiUpperCase(S1); strSub = AnsiUpperCase(strSub); } cSub = strSub.SubString(1,1); for(i=1;i<=S1.Length();i ) { if (iPos >= iStart) { cS1 = S1.SubString(i,1); if (cS1 == cSub) { bolIsMatch = true; for(j=0;j |
blk5743
高階會員 ![]() ![]() ![]() ![]() 發表:34 回覆:371 積分:236 註冊:2003-11-17 發送簡訊給我 |
函式名稱:Mid
說明:抓取字串
Mid("字串",開始位置,字數)
BCB有SubString可用 函式名稱:InStr
說明:尋找字串
iPos = InStr("被搜尋的字串","搜尋的字串"[,開始位置,是否區分大小寫]);
BCB有Pos可用 函式名稱:Len
說明:計算字串長度
iLen = Len("字串");
BCB有Length可用 用法
你的string必須用BCB的AnsiString宣告
例AnsiString AAA = "BBB";
你就可以使用AAA.SubString等功能了
詳細用法可以再網站搜尋或查help
不過,這跟中英文夾雜好像沒什麼關係
|
s1937kk
一般會員 ![]() ![]() 發表:2 回覆:15 積分:8 註冊:2004-11-15 發送簡訊給我 |
你好,我想可能是我沒表達清楚吧
你說的AnsiString我當然知道...
如果你有看我的函數內容的話...
|
fusung
中階會員 ![]() ![]() ![]() 發表:26 回覆:169 積分:99 註冊:2003-11-25 發送簡訊給我 |
哈囉,s1937kk 今天剛好用了你的函式解決了一個問題,感覺真好
------
The first step toward proving things for yourself is to understand how others have done it before! |
s1937kk
一般會員 ![]() ![]() 發表:2 回覆:15 積分:8 註冊:2004-11-15 發送簡訊給我 |
|
zhvickie
一般會員 ![]() ![]() 發表:16 回覆:41 積分:11 註冊:2003-05-11 發送簡訊給我 |
|
s1937kk
一般會員 ![]() ![]() 發表:2 回覆:15 積分:8 註冊:2004-11-15 發送簡訊給我 |
我剛剛修改了一下函式的內容
修正後執行效率變比較快一些
AnsiString str ="a中b英c文d夾e雜f字g串h"; int i,a; for(i=0;i<100000;i ) { a = InStr(str,"h"); }修正前時間:2.81880002 修正後時間:0.115599999 ------------------------------------------------ 「Len」 AnsiString str ="a中b英c文d夾e雜f字g串h"; int i,a; for(i=0;i<100000;i ) { a = Len(str); }修正前時間:1.517400014 修正後時間:0.0328 |
zhvickie
一般會員 ![]() ![]() 發表:16 回覆:41 積分:11 註冊:2003-05-11 發送簡訊給我 |
|
s1937kk
一般會員 ![]() ![]() 發表:2 回覆:15 積分:8 註冊:2004-11-15 發送簡訊給我 |
|
jackyung
一般會員 ![]() ![]() 發表:22 回覆:46 積分:13 註冊:2004-01-24 發送簡訊給我 |
|
s1937kk
一般會員 ![]() ![]() 發表:2 回覆:15 積分:8 註冊:2004-11-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |