在c++里截取字符串可以使用string.substr(),可是这个函数只能按英文来截取,
如果是汉字可能就要计算好字符个数,如果是汉字和英文混合,那就只能望洋兴叹了。
可是恰好我需要这样一个函数,于是就自己实现了一个,其中如何判断汉字和英文
参看了此处。
代码简单也无优化,若有更好的方法欢迎提出,代码如下。
# include & lt; iostream> # include & lt; string> # include# include # include 使用名称空间性病; int is_zh_ch (char p) {/*汉字的两个字节的最高为都为1,这里采用判断最高位的方法 将p字节进行移位运算,右移8位,这样,如果移位后是0, 则说明原来的字节最高位为0,不是1那么也就不是汉字的一个字节 */如果(~ (p祝辞祝辞8)==0) { 返回1;//代表不是汉字 } 返回1; } 子字符串(string str, int, int结束=1) { 如果类型id (str)==类型id(字符串),,str.length()在0) { int len=str.length (); 字符串tmp=" ";//先把str里的汉字和英文分开 向量& lt; string>倾倒; int i=0; 而(i<兰) { 如果(is_zh_ch (str.at (i))==1) { dump.push_back (str.substr(我,2)); 我=我+ 2; } 其他的 { 1)dump.push_back (str.substr(我); 我=我+ 1; } } 结束=end> 0 & # 63;结束:dump.size ();//结束默认为dump.size 如果(start<0 | | start>结束) printf("开始是错的”);//直接从垃圾堆里取即可 (我=开始;i<=结束;我+ +) { tmp +=转储(张); } 返回tmp; } 其他的 { printf (" str不是字符串\ n”); 返回"; } } int main () { 字符串p="半山无极”; cout<& lt;子(p, 1, 1) & lt; & lt; endl; cout<& lt;子(p 2 2) & lt; & lt; endl; cout<& lt;子(p, 3); }
以上所述是小编给大家介绍的c++截取汉字英文混合字符串详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!