C语言截取中英文混合字符串

如题所述

在处理包含中英文混合的字符串时,特别是涉及到中文字符和Ascii字符混合情况时,确需细致思考。为实现截取任意第n个字符之前的字符功能,编写了以下代码供学习参考。欢迎在有改进空间的地方留下宝贵意见。

代码实现目标:

仅显示任意指定字符之前的字符串内容。

* 示例文本:“chi红na中国发verygood”

* 思路解析:

Ascii码的最高位为0,表示每个字符占用1个字节。

GB2312码的最高位为1,表示每个字符占用2个字节。

通过判断字符的最高位是否为1,可识别中文字符。

假设要截取掉第4个字符“红”之后的文本,计算之前字符占用的字节为:1(首字符)+1(次字符)+1(再字符)+2(中文字符)=5字节。

将从第5个字节开始的1个字节修改为结束符'\0'。

假设要截取掉第8个字符“国”之后的文本,计算之前字符占用的字节为:1(首字符)+1(次字符)+1(再字符)+2(中文字符)+1(英文字符)+1(英文字符)+2(中文字符)+2(额外中文字符)=11字节。

将从第11个字节开始的1个字节修改为结束符'\0'。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜