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

你好,請問要如何正確截取中英文混雜的String呢?

答題得分者是:andychang1690
login30
一般會員


發表:3
回覆:5
積分:1
註冊:2004-07-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-31 13:33:19 IP:61.228.xxx.xxx 未訂閱
譬如說 String strA="Iam好人in這world"; 如果我要正確的截取到第8個字(中文字算一個字),該怎麼做? 前題是這個strA是變動的,每次都要截第八個字,中英文都算一個字… 若用strA.SubString(index,count)來截的話,這裡頭的index與count 又該怎麼下呢? 剛學BCB的新手,麻煩您幫幫忙,謝謝…
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-31 14:12:27 IP:218.170.xxx.xxx 未訂閱
首先你要先了解一下雙字元編碼的規則! 雙字元的編碼第一個碼為0x80 ~ 0xFF 因此你在讀一個字元時判斷該碼是否為0x80 ~ 0xFF,若是則表示是雙字元編碼的第一碼!    
AnsiString S = "Iam好人in這world" ;
char *ptr = S.c_str();
int Count = 0;
for (int i = 0; i < S.Length(); i  )
{
     Count  ;
     if (Count == 6 )
     {
          if (ptr[i] & 0x80)
              ShowMessage(S.SubString(i   1,2));              else
              ShowMessage(S.SubString(i   1,1));
          break;
     }
     if (ptr[i] & 0x80)
        i  ;
}
發表人 - liangnet 於 2004/07/31 14:28:32
login30
一般會員


發表:3
回覆:5
積分:1
註冊:2004-07-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-31 14:55:55 IP:61.228.xxx.xxx 未訂閱
謝謝你,再請問一下,我如果要自行寫一個 不分中英文都算一個字的Funciton SubString() 的話 應該怎麼寫呢? 再次謝謝你…
andychang1690
資深會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-31 15:42:40 IP:202.104.xxx.xxx 未訂閱
其實不用到char,AnsiString 就可以做到,改寫liangnet的程式:
  AnsiString S = "Iam好人in這world" ;
  int Count = 0;
  for (int i = 1; i <= S.Length(); i  )  { //注意i從一開始
     Count  ;
     if (Count == 4 )  {
          if ( S[i]  & 0x80)
              ShowMessage(S.SubString(i ,2));
          else
              ShowMessage(S.SubString(i ,1));
          break;
     }
     if ( S[i]  & 0x80)
        i  ;
  }
所以你要寫一個Chinese_SubString(AnsiString Str,int i_Start,int i_Num)
int End_n=i_Start i_Num-1; // 你要抓取的總術字數
// 判斷最後一個字是否中文
if ( S[End_n]  & 0x80) 
  return Str.SubString(i_Start,i_num 1); // 是中文
else
  return Str.SubString(i_Start,i_num); // 英數字    請參考
Andy Chang
------
Andy Chang
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-31 17:12:52 IP:218.170.xxx.xxx 未訂閱
哦~原來AnsiString 可以用 S[index],又學習到一招啦^^y
系統時間:2024-04-29 11:09:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!