好像有个wchar_t类型的,这里不深究了,只研究char型(1个字符大小)的

1.定义

直接使用char,但每个汉字占据2个字符,所以必须以字符串形式存在

char s[10];

2.定义时直接赋值

和基本类型相同,如 char s[10]="汉字"

3.输出

整个字符串输出

printf("%s",s);

cout<<s<<endl;

单个汉字字符输出

这里有点考究了

如果printf("%c",s[0]); 会输出一个问号

合适的方法应该是printf("%c%c",s[0][1]);

4.输入

整个字符串的输入

和之前一样使用 scanf("%s",s); cin>>s;

单个汉字字符的输入

这里的输入和以往的不同.

如果是scanf("%c",s[0]);  结果字符串相应的那个汉字会变成一个奇怪的其他字符,而不是自己输入那个字符

合适的方法应该是输入 scanf("%c%c",s[0],s[1]);

5.原因与分析

为什么会有这样的差别。自己推测原因如下(由于时间不充足就不做严格的证明了)

汉字的编码区中,存储单元上两个字节都是负数。所以系统在输出汉字字符串的时候先检测这个字节是否负数,如果是负数则要连同下一个字节,并合成一个有两字节长度的字符来输出,由此产生出了我们的汉字。那么输入的时候,则把用户输入的汉字,拆分为两个字符,然后分别放在参数列表指定的位置上,即例如到了 scanf("%c%c",s[0],s[1]);这个命令的时候,用户输入了一个“汉”字,然后“汉”拆分成了两个字符,第一个是“汉”的高八位,第二个是“汉”的低八位,然后分别放进了s[0]和s[1]中.

6.在代码中修改单个汉字

s[0]="中" 这种方法是显然行不通的,而对字符串又不能使用位移操作符来获取高八位低八位

最纠结的问题,搜寻许久无果,然后产生了原因分析,根据原因找到了改进的方法

使用strncpy()函数,头文件包含在string.h

例如要修改s中第一个字符

strncpy(s,"中",2); 这样就成功了

可以写一个宏定义函数

#define Chcpy(s,pos,t)  strncpy(s+pos,t,strlen(t))

s是被替换的字符串,pos是替换的起始位置,t是替换字符串

C 汉字处理的更多相关文章

  1. 结巴分词3--基于汉字成词能力的HMM模型识别未登录词

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 算法简介 在 结巴分词2--基于前缀词典及动态规划实现分词 博 ...

  2. .net汉字转字母

    目前手上有一个需要实现:将用户输入的姓名转换成汉语拼音. 使用枚举,既麻烦又易出错,发现有一个微软拼音转换工具类ChnCharInfo.dll,在此记录下: 首先需要引入此dll, 链接: http: ...

  3. STemwin汉字显示

    硬件环境: STM32F429,电容屏800X480 5点触控RGB屏幕 ,SPI flash: 软件环境: UCOSIII,STemwin: 汉字显示方法: 1.在SPIflash中装在字库XBF_ ...

  4. 【转载】C#怎么判断字符是不是汉字

    支持并尊重原创!原文地址:http://jingyan.baidu.com/article/2c8c281deb79ed0008252af1.html 判断一个字符是不是汉字通常有三种方法,第1种用 ...

  5. iOS 汉字的拼音

    获取汉字的拼音 #import <Foundation/Foundation.h> @interface NSString (Utils) /** * 汉字的拼音 * * @return ...

  6. Oracle汉字转拼音package

    --函数GetHzFullPY(string)用于获取汉字字符串的拼音 --select GetHzFullPY('中华人民共和国') from dual; --返回:ZhongHuaRenMinGo ...

  7. Linux C语言解析.bmp格式图片并显示汉字

    bmp.h 文件 #ifndef __BMP_H__ #define __BMP_H__ #include <unistd.h> #include <stdio.h> #inc ...

  8. [python]获取网页中内容为汉字的字符串的判断

    实际上是这样,将获取到网页中表单内容与汉字字符串作比较,即: a = request.POST['a'] if a == '博客园': print 'ok' else: print 'false' a ...

  9. [No000093]按住Alt 再按数字键敲出任意汉字和字符!

    1.在notepad里,(中文系统下) 按住Alt 然后按52946最后放开Alt 按住Alt 然后按45230最后放开Alt 按住Alt 然后按50403最后放开Alt 你会看到"我爱你& ...

  10. JavaScript 汉字与拼音互转终极方案 附JS拼音输入法

    转:http://www.codeceo.com/article/javascript-pinyin.html 前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的 ...

随机推荐

  1. 【BZOJ3963】[WF2011]MachineWorks cdq分治+斜率优化

    [BZOJ3963][WF2011]MachineWorks Description 你是任意性复杂机器公司(Arbitrarily Complex Machines, ACM)的经理,公司使用更加先 ...

  2. sqlite与sqlserver区别

    1.查询时把两个字段拼接在一起 --sqlserver-- select Filed1+'@'+Filed2 from table --sqlite-- select Filed1||'@'||Fil ...

  3. 【题解】P3258松鼠的新家

    [题解][P3258 JLOI2014]松鼠的新家 树链剖分板子题. 总结一点容易写错的地方吧: if(d[top[u]]<d[top[v]]) swap(u,v);注意是\(top\). 在\ ...

  4. 我的Android进阶之旅------>真正在公司看几天代码的感触

    仅以此文来回顾这一周我的工作情况,以及由此而触发的感想. ============================================================= 来到新公司5天了, ...

  5. No provisioned iOS devices are available with a compatible iOS version. Connect an iOS device with a

    No provisioned iOS devices are available with a compatible iOS version. Connect an iOS device with a ...

  6. Cglib学习报错 java.lang.reflect.InvocationTargetException-->null

    package javacore.testForCglibProxy; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhan ...

  7. HTML5/CSS3超酷环形动画菜单

    在线演示 本地下载

  8. 关于connect: network is unreachable 问题的解决【转】

    本文转载自:https://blog.csdn.net/liukun321/article/details/6662950 由于发现原创文章,在未署名作者及出处的情况下被转载.在以后所有的原创文章开头 ...

  9. vi编辑器使用方法(最详细)

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  10. 算法(Algorithms)第4版 练习 1.3.8

    方法实现: //1.3.8 package com.qiusongde; import java.util.Iterator; import java.util.NoSuchElementExcept ...