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;
}

運行結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM