带有汉字的字符串截断出现半个“汉字”的解决方法-C语言源码

简介:   汉字字符的编码为双字节,对于汉字字符和单字节字符混排的情况,如果目标截取的字符串内只包含奇数个单字节字符,则会出现半个汉字字符的问题。如下所示:   (1)天水市秦州区南郭路2号(工行七里墩分理处? --包含数字字符,单字节。

  汉字字符的编码为双字节,对于汉字字符和单字节字符混排的情况,如果目标截取的字符串内只包含奇数个单字节字符,则会出现半个汉字字符的问题。如下所示:

  (1)天水市秦州区南郭路2号(工行七里墩分理处? --包含数字字符,单字节

  (2)七里河区金港城金福花园20号楼3号(金港城?--包含数字字符,单字节。

  (3)甘肃银馨春天餐饮服务业有限责任公司(省委? --包含英文格式半括号。

  以上为截取字符串前四位以后的显示结果,其中“?”为半个汉字编码的显示。要想解决以上问题可以采用截取最后一个非法字符,并用合法字符替换的方法。实例代码如下所示:

#include <stdio.h>
int chkHalfChinese(char *buf,int len)
{
        int i = 0;
    int cnt = 0;
    int idx;
    for(i=0;i<len;i++)
     {
           int value = buf[i]&0xFF;
        if(value>160)   
         {
           cnt++;   
           idx=i;
         }
     }
    if(cnt%2)
     {
        buf[idx] =' ';
        return(1);
     }
    else
        {
        return(0);
      }
}

int main(void)
{
  char str[44] = "天水市秦州区南郭路2啊(工行七里墩分理处里家";  
  if(chkHalfChinese(str,40)==1)
  {
    printf("true\n");
  }
  else
  {
    printf("false\n");
  }
  printf("%s\n",&str);
  return 0;
}
程序代码在Linux环境下测试通过,运行结果如下图所示:

 

 


作者:张子良
出处:http://www.cnblogs.com/hadoopdev
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

相关文章
|
6月前
|
存储 编译器 C语言
在C语言中的数组和字符串
在C语言中的数组和字符串
|
2月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
|
4月前
|
安全 C语言
C语言8 数组与字符串
C语言8 数组与字符串
34 0
|
存储 机器学习/深度学习 Linux
【C语言】语言篇——数组和字符串
【C语言】语言篇——数组和字符串
50 0
|
存储 C语言
C语言之指针(指针数组以及指针的指针和字符串)
C语言之指针(指针数组以及指针的指针和字符串)
96 0
|
存储 C语言
【C语言程序设计】知识点汇总3——数组、字符串数组、字符串输入输出相关注意事项
【C语言程序设计】知识点汇总3——数组、字符串数组、字符串输入输出相关注意事项
262 0
【C语言程序设计】知识点汇总3——数组、字符串数组、字符串输入输出相关注意事项
|
C语言
c语言 字符数组,字符串
char str[5] = { ‘A’,66,‘C’ ,‘D’ ,69 }; / / 66换成大写字母就是B,69就是E char str[5] = { ‘A’,66,‘C’ }; / / 初始化部分元素,其余默认是0 char str[ ] = { ‘A’,66,‘C’ ,‘D’ ,69 }; / / 这样初始化时,可以不写个数
137 0
|
C语言
【C 语言】二级指针作为输入 ( 指针数组 | 指针数组排序 | 字符串排序 | strcmp 函数 )
【C 语言】二级指针作为输入 ( 指针数组 | 指针数组排序 | 字符串排序 | strcmp 函数 )
155 0
【C 语言】二级指针作为输入 ( 指针数组 | 指针数组排序 | 字符串排序 | strcmp 函数 )
|
C语言
【C语言深度剖析】深入理解字符数组和字符串数组
【C语言深度剖析】深入理解字符数组和字符串数组
188 0
【C语言深度剖析】深入理解字符数组和字符串数组
|
人工智能 Linux C语言
c语言基础学习05_数组和字符串
=============================================================================涉及到的知识点有:for循环有两种写法、数组、一维数组定义与使用、一维数组的初始化、如何得到一个一维数组的成员数量、查找出一维数组中成员最大值、查...
1127 0