汉字的处理

博客主要探讨C语言中汉字存储问题,指出程序多处理英文,存储汉字用字符数组,不同系统汉字大小或有差异,还需注意半角全角。给出汉字输入输出示例,以及为识别汉字实现拷贝的程序,介绍了汉字编码机制。

许多C语言参考书中都没涉及到这个问题,程序中多为处理英文变量和英文字符串,当然
存储汉字应该用字符数组,这一点是肯定的,关键问题是汉字在你的计算机系统上占几个字节呢?
你用这个语句就知道大小了:

printf("%d",strlen("大小"));   //输入2个汉字的大小

但是每个系统中汉字的大小又是不同的,幸运的是多数系统中汉字的大小是相同的。
但还得注意汉字的半角和全角问题哦
那我用个简单的例子说明汉字的输入和输出:
#include<iostream>
using namespace std;

int main()
{
 char a[3];
 cin>>a;
 cout<<a;
 return 0;
}

输入:是
输出:是

另外一程序是为了识别汉字来实现一拷贝

/*
这是汉字编码的机制所定的.为了很英文编码区分.
一般情况下当第一个字节高位为1的时候,
默认这个字节和后面的一个字节组合起来构成一个汉字~
*/
#include<stdio.h>
#include <string.h>
#define SIZE 3
void my_strcopy(char dest[],char s[],int N)
{
 int i=strlen(s);
 if(N>=i)   //如果N大于i则直接拷贝。
 {
  strcpy(dest,s);
  return;
 }
 int flag=0;//添加一个标志,用来标志所加的中文的位数
 for(int j=0;j<N-1;j++) //N-1用来腾出一位存'/0',字符串数组需要
 {
  if(s[j]<0)//因为如果是中文字符,它的值是小于零的。
   flag++;
  dest[j]=s[j];
 }
 if(flag%2!=0)//所加中文如果是奇数,则证明最后一位是中文,且只把它的一半给加进来了。
  dest[--j]='/0';
 else
  dest[j]='/0';
 printf("%d",flag);
 
}
void main()
{
  char s[]="中文windows98使用说明";
  char dest[SIZE];
  my_strcopy(dest,s,SIZE);
  printf("%s/n",dest);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值