标题:[原创]wchar_t在汉字处理中的应用
取消只看楼主
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
 问题点数:0 回复次数:6 
[原创]wchar_t在汉字处理中的应用

//双字节字符常量用于汉字存储
//显然有利于汉字处理如判回文
#include<stdio.h>
typedef unsigned short wchar_t;//用VC则应删除此行,因VC中wchar_t成了基本类型
main()
{
wchar_t s[ ]={'上','海','自','来','水','来','自','海','上',0};
char *p=(char*)s;
int i;
puts(p); //这样不能显示原文
for(i=0;s[i];i++,p++,p++)
printf("%c%c",*(p+1),*p);
printf("\n");
//这样才显示原文
//有兴趣者继续编程以判断这句话是否回文:
;;;;;;;;;;;;;;;;
}


[此贴子已经被作者于2006-6-23 13:16:09编辑过]

搜索更多相关主题的帖子: wchar 汉字处理 应用 
2006-06-22 15:16
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 

用TC或VC皆可编译,关键是扩展名取c
即按c标准处理它。用cpp反而不行!


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-22 16:13
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 

//双字节字符wchar_t
//判断是否汉字回文
#include<stdio.h>
main()
{
wchar_t s[10]={'上','海','自','来','水','来','自','海','上'};
char *p=(char*)s;
int i,j;
//puts(p);这样不能显示原文
//这样才显示原文:
for(i=0;s[i];i++,p++,p++)
printf("%c%c",*(p+1),*p);
printf("\n");
//继续编程以判断这句话是否回文:
for(j=0;s[j];j++);//测汉字数
for(j--,i=0;i<j;i++,j--)
if(s[i]-s[j])break;
if(i>=j)
printf("yes\n");//是回文
else
printf("no\n");//不是回文
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-22 16:52
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
/*谢谢8楼指点。顺便请教一下
怎样输出VC的__int64型整数?
*/
#include<stdio.h>
#include<locale.h>
main()
{
wchar_t s[]=L"上海自来水来自海上";
_wsetlocale(LC_ALL,L"chs"); //此不能省
wprintf(L"%s\n",s);
}

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-22 17:19
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 

//__int64型整数(64位,VC++6.0提供)如何输出?
#include<stdio.h>
main()
{
__int64 x= -9551616;
printf("%I64d\n",x);//与printf("%I64i\n",x);等价
printf("%I64u\n",x);//按unsigned __int64进行输出
}

/*------------------*
屏幕输出如下
-9551616
18446744073700000000
*-------------------*/


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-22 19:43
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
以下是引用langzi546在2006-6-22 20:01:15的发言:
运行结果:

上海自来水来自海上
yes
Press any key to continue...

我有好几个地方搞不懂:
1,“判回文”是什么意思啊?
2, “char *p=(char*)s;”这种定义方法首见,怎么会有“(char*)s”的写法?我知道指针p是指向s[10],可还是不理解。
3,“for(i=0;s[i];i++,p++,p++)printf("%c%c",*(p+1),*p);”这样不是先输后一个字在输前一个字了吗?为什么不“printf("%c%c",*p,*(p+1));”呢?
请"-★-"指点,谢谢!

1。“上海自来水来自海上”倒过来念也是一模一样的,所以称为“回文”。古时候不就有回文诗嘛!
2。p的“基类型”是char,你让它直接指向 wchar_t s[ ] 的s,类型失配。所以要进行
“强制类型转换”(char*)s
3。这件事最好上机试一下,你就恍然大悟了。如果再悟不出来,尽管发帖问。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-22 20:09
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 

/*进一步熟悉VC之wprintf(L"%s%c")的用法*/
#include<stdio.h>
#include<locale.h>
main()
{
_wsetlocale(LC_ALL,L"chs");

{
wchar_t str[]=L"上海自来水来自海上";
//short str[]=L"上海自来水来自海上";也可
wprintf(L"%s\n",str);
}

{
wchar_t a=L'下',b=L'海',*p=L"经",*q=L"商";
//short a=L'下',b=L'海',*p=L"经",*q=L"商";也行
wprintf(L"%c%c%c%c\n",a,b,*p,*q);
}

}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-23 09:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-74103-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.196406 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved