| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6066 人关注过本帖, 1 人收藏
标题:中文字符判断可以吗?比如if (你好 == 你好)???
只看楼主 加入收藏
心灵百合
Rank: 5Rank: 5
等 级:职业侠客
帖 子:215
专家分:367
注 册:2011-3-30
收藏
得分:5 
定义字符串
2011-11-08 17:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不碰到钉子不会继续学习的,嘿嘿~

授人以渔,不授人以鱼。
2011-11-08 17:10
零波丽
Rank: 3Rank: 3
来 自:莉莉斯
等 级:论坛游侠
帖 子:222
专家分:107
注 册:2011-9-8
收藏
得分:0 
恩.........  好的
我改啦~恩...........
可是他真的在这里 可以用的说 ......
好吧 特殊情况 错误方式 改...
攀枝花我们这也下雨了 各位朋友 注意身体的说 我就不小心 感冒了 ......

人又是什么?神造出来的东西。 人是人造出来的东西。
2011-11-08 17:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
可你个头以,看看12楼告诉你“可以”的原因。当你的数据不是常量时,就不可以,因为它们的内容相同但地址不会也相同。这根本就是原则性的错误,还可以。

授人以渔,不授人以鱼。
2011-11-08 17:35
零波丽
Rank: 3Rank: 3
来 自:莉莉斯
等 级:论坛游侠
帖 子:222
专家分:107
注 册:2011-9-8
收藏
得分:0 
先前整理的 资料

汉字的编码
编码方案繁多,需要有一个统一的标准。1981年,国家标准局公布了《信息交换用汉字编码字符集基本集》(简称汉字标准交换码),共分两级,一级3755个字,二级3008个字,共6763个字。这种汉字标准交换码是计算机的内部码,可以为各种输入输出设备的设计提供统一的标准,使各种系统之间的信息交换有共同一致性,从而使信息资源的共享得以保证。目前,正在制定《信息交换用汉字编码字符集辅助集》,以满足少数用字量超过基本集的用户和台湾、香港等地的需要。

.汉字采用2字节编码(现在不完全准确),国家制定.现在的标准是GB18030,早期是GB2312-80.前者含盖后者.
3.一个字节是8位,ASCII码最高位是'0'(所以最多128个编码).
4.汉字将最高位置为'1',与ASCII码(英文符号)区隔开.
5.软件当读取一个字节时,先判断最高位是否为'0'.若是,则作英文符号处理;若不是,再读取下一个字节,两个字节合一处对应一个汉字.如,B0A1-'啊',D5FE-'政'.
6.无论是ASCII码还是汉字编码,相当于身份证号.实际显示出的汉字要到一个叫"汉字模库'的文件中提取,它的位置与编码有相对应的关系.

可以看出 汉字是有一种编码 然后 调用 什么东西得来的

IF语句
执行真假值判断,根据逻辑计算的真假值,返回不同结果。可以使用函数 IF 对数值和公式进行条件检测。
这里可以知道 IF是对括号里的逻辑判断
那么 如果考虑 汉字在机器中读取的时候会从汉字化为某种编码 那么 应该是 可行的
但是 “男”是字符串 为什么能判断字符串~?还没想通 可能是我的编译器设定的 别的不行所以 没有 可移植性..
(IF暂时只知道只能判断真假)

再看 strcmp 是专门用来字符串的 结果为 -1 0 1 那么 可行性 可移植性应该更高

以下资料
.如果 字符串1的第n位的ASCII码值 等于 字符串2的第n位的ASCII码值

则 继续比较下一位

2.如果 字符串1的第n位的ASCII码值 大于 字符串2的第n位的ASCII码值

则 输出结果:1,表示字符串1 > 字符串2;

3.如果 字符串1的第n位的ASCII码值 小于 字符串2的第n位的ASCII码值

则 输出结果:-1 表示字符串1 < 字符串2;

4.如果 每一位的ASCII码值都相等,而且长度相同,

则 输出结果:0 表示字符串1 == 字符串2;

5.如果 字符串1是字符串2的前m位,例如 abcd 与abcdef 比较,

则 字符串1<字符串2.

原因是,到第5位时,字符串1的ASCII值是0,而字符串2的ASCII值为'e',即十进制的101,当然是字符串2大了.

具体到 cds和lesoqd

从第一位开始,'c'和'l'比较,当然是'c' < 'l'了,所以,"cds" < "lesoqd"

人又是什么?神造出来的东西。 人是人造出来的东西。
2011-11-08 17:44
零波丽
Rank: 3Rank: 3
来 自:莉莉斯
等 级:论坛游侠
帖 子:222
专家分:107
注 册:2011-9-8
收藏
得分:0 
回复 24楼
别生气啦 ~我改了的了.....
可以冒昧的问一句吗?~你是程序员吗?~?
好厉害的说 难道是 老师 覅额覅额

人又是什么?神造出来的东西。 人是人造出来的东西。
2011-11-08 17:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
搜到资料也不求甚解。你那里a==b是指针,你靠a、b的指针相等来判断它们所指向的内容相等?a、b指向char,是汉字的第一个字节,第一个字节相同的汉字多了,你以为只有"男"=="男"?你不把后一个字节也判断了,就无法确定那两个字节是完全相等的!char* a是什么?仅仅是一个char,而汉字是两个char。

宽字符比较,它的定义是word,只有word a == word b,才能说a==b。1 word是2 char。用单引号括着的是字符,在ANSI编码体系,只有'1'没有'男';在宽字符编码体系,是L'1'和L'男',两个字符都是双字节。如果用双引号,无论里面是否单个字符,都是字符串,后面必定带相应的空结束符,用双引号括着的文字,都必须用字符串比较。

授人以渔,不授人以鱼。
2011-11-08 18:04
零波丽
Rank: 3Rank: 3
来 自:莉莉斯
等 级:论坛游侠
帖 子:222
专家分:107
注 册:2011-9-8
收藏
得分:0 
o哦  这个 还真的不知道的说..............恩

人又是什么?神造出来的东西。 人是人造出来的东西。
2011-11-08 18:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
"男"的内码,第一个字节是196,第二个字节是208,即十六进制C4D0。而(196,207)是'南',(196,209)是'难',你可以试试用char *的办法比较这三个汉字是不是相等的。

再告诉你一个汉字的现象:你printf("%d %d", 196, 208)和printf("%d%d", 196, 208)看看,变换一下这些数据和格式,自己体验一下吧。

授人以渔,不授人以鱼。
2011-11-08 18:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
汉字的内码,比如"男",它是两个byte前后组成的双字节字符串(196,208),当我们从流输入中读入这种数据时,是按顺序逐个byte读入的,那么,可以用一个结构表示它:
struct hz
{
    char high;
    char low;
}
这个结构中,前面的字节是高位,后面是低位,它也可以看作是一个固定两字节无结束符的字符串,两个字节都是256以内的ACII字符(当我们分别输出高位和低位字符时就能看到)。某些时候,我们不把这样的数据结构视为双字符,而把它视为一个2字节16位整数word,此时它的值就是high * 256 + low,即高位左移8位(一个byte宽)再与低位叠加,仍是事实上的前后字符构造(所谓的4字节长整数,实质就是类似这样的四个字符构成的字符串,同理,一个byte也可以视为8个0/1值串起的字符串,读书能读到这个份上,就不会死读书了)。因此,"男"的内码有时写成196*256+208=50384,偶然也可以写成负数。但无论怎样解读,它的本质都仍然是上面那个结构。也就是说,逐个byte读和逐个word读,其实是一样的,前者自己转换为word,后者内置了同样的转换过程;逆转的过程也与此相似。其实,如果你喜欢,完全可以将内存中的高位优先顺序在写到外设时改换为低位优先,或者反过来,让那些古板的程序员按高位优先读入错误的数据。这种手段,在工业控制即单片机编程上是必须要懂的,特别是在用串口通讯的时候。

[ 本帖最后由 TonyDeng 于 2011-11-8 19:21 编辑 ]

授人以渔,不授人以鱼。
2011-11-08 18:51
快速回复:中文字符判断可以吗?比如if (你好 == 你好)???
数据加载中...
 
   



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

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