c++ 带中文汉字的字符串截取
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; }
运行结果如下: