C++的string字符串中同時含有漢字和英文字符時,由於漢字和英文字符所暫的字節長度不一樣,
直接用substr(int begin,int end) 截取容易出現亂碼,在網上找了個方法測試有效,現在記錄一下:
1 //判斷字符是否是中文 2 int is_zh_ch(char p){ 3 if(~(p >> 8) == 0) 4 { 5 return 1; 6 } 7 return -1; 8 }
1 string sub(string str,int start,int end){ 2 if(typeid(str)==typeid(string) && str.length()>0){ 3 int len=str.length(); 4 string tmp=""; 5 vector <string> dump; 6 int i=0; 7 while(i<len) 8 { 9 if (is_zh_ch(str.at(i))==1) 10 { 11 dump.push_back(str.substr(i,2)); 12 i=i+2; 13 }else{ 14 dump.push_back(str.substr(i,1)); 15 i=i+1; 16 } 17 } 18 end=end>0?end:dump.size(); 19 if(start<0||start>end){ 20 printf("方法調用錯誤,第一個參數應該大於等於0且小於第二個參數!\n"); 21 } 22 for(int i=start; i<=end; i++) 23 { 24 tmp+=dump[i-1]; 25 } 26 return tmp; 27 } 28 else 29 { 30 printf("請輸入字符串!\n"); 31 return ""; 32 } 33 }
//函數的調用 int main() { string p="2017年04月01日10時48分19秒 基准測試_小白兔 _feeder1 test_sg_kg 大灰狼(后台補)"; cout<<sub(p,1,20)<<endl; cout<<sub(p,28)<<endl; }
運行結果如下:

