国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

c++截取漢字和英文混合字符串代碼實例

2020-01-26 13:28:35
字體:
來源:轉載
供稿:網(wǎng)友

在C++里截取字符串可以使用string.substr(),可是這個函數(shù)只能按英文來截取,

如果是漢字可能就要計算好字符個數(shù),如果是漢字和英文混合,那就只能望洋興嘆了。

可是恰好我需要這樣一個函數(shù),于是就自己實現(xiàn)了一個,其中如何判斷漢字和英文

參看了此處

代碼簡單也無優(yōu)化,若有更好的方法歡迎提出,代碼如下。

#include <iostream>#include <string>#include<cstdio>#include<vector>#include<typeinfo>using namespace std;int is_zh_ch(char p){  /*漢字的兩個字節(jié)的最高為都為1,這里采用判斷最高位的方法  將p字節(jié)進行移位運算,右移8位,這樣,如果移位后是0,  則說明原來的字節(jié)最高位為0,不是1那么也就不是漢字的一個字節(jié)  */  if(~(p >> 8) == 0)  {    return 1;//代表不是漢字  }  return -1;}string sub(string str,int start,int end=-1){  if(typeid(str)==typeid(string) && str.length()>0)  {    int len=str.length();    string tmp="";    //先把str里的漢字和英文分開    vector <string> dump;    int i=0;    while(i<len)    {      if (is_zh_ch(str.at(i))==1)      {        dump.push_back(str.substr(i,2));        i=i+2;      }      else      {        dump.push_back(str.substr(i,1));        i=i+1;      }    }    end=end>0?end:dump.size(); //end默認為dump.size    if(start<0||start>end)      printf("start is wrong");     //直接從dump里取即可    for(i=start; i<=end; i++)    {      tmp+=dump[i-1];    }    return tmp;  }  else  {    printf("str is not string/n");    return "";  }}int main(){  string p="半山wuji";  cout<<sub(p,1,1)<<endl;  cout<<sub(p,2,2)<<endl;  cout<<sub(p,3);}

以上所述是小編給大家介紹的c++截取漢字英文混合字符串詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 平原县| 新建县| 施甸县| 梁平县| 疏勒县| 会理县| 开阳县| 四川省| 金华市| 新巴尔虎右旗| 房山区| 察隅县| 永兴县| 安福县| 洪湖市| 湖南省| 昌都县| 江孜县| 盐城市| 同仁县| 罗甸县| 自治县| 荣昌县| 武清区| 宁明县| 延吉市| 寿宁县| 焉耆| 响水县| 甘肃省| 东乡| 岳阳县| 弋阳县| 平山县| 同仁县| 将乐县| 和静县| 吴忠市| 永春县| 屯留县| 平度市|