计算机⽐较字母⼤⼩,如何⽐较串的⼤⼩
两个数字,很容易⽐较⼤⼩。2⽐1⼤,这完全正确,可是两个字符串如何⽐较呢?
⽐如"silty”、“stupid”这样的同样表达“愚蠢的”的单词字符串,它们在计算机中的⼤⼩其实取决于它们挨个字母的前后顺序。它们的第⼀个字母都是 s,我们认为不存在⼤⼩差异,⽽第⼆个字母,由于“i”字母⽐“t”字母要靠前,所以“i” < “t”,于是我们说 “silly”< “stupid”。
事实上,串的⽐较是通过组成串的字符之间的编码来进⾏的,⽽字符的编码指的是字符在对应字符集中的序号。
关于编码
计算机中的常⽤字符是使⽤标准的ASCII编码,更准确⼀点,由7位⼆进制数表⽰⼀个字符,总共可以表⽰128个字符。
后来随着⼀些特殊符号的出现,128个不够⽤,于是扩展ASCII码由8位⼆进制数表⽰⼀个字符,总共可以表⽰256个字符,这已经⾜够满⾜以英语为主的语⾔和特殊符号进⾏输⼊、存储、输出等操作的字符需要了。
可是,单我们国家就有除汉族外的满、回、藏、蒙古、维吾尔等多个少数民族⽂字,换作全世界估计要有成百上千种语⾔与⽂字,显然这256个字符是不够的,因此后来就有了 Unicode 编码,⽐较常⽤的是由16位的⼆进制数表⽰⼀个字符,这样总共就可以表⽰216个字符,约是65万多个字符,⾜够表⽰世界上所有语⾔的所有字符了。当然,为了和ASCII码兼容,Unicode的前256个字符与ASCII码完全相同。
所以如果我们要在C语⾔中⽐较两个串是否相等,必须是它们串的长度以及它们各个对应位置的字符都相等时,才算是相等。
串的⽐较
即给定两个串:s="a1a2……an",t="b1b2……bm",当且仅当 n=m,且 a1=b1, a2=b2, ……, an=bm 时,我们认为 s=t。
那么对于两个串不相等时,如何判定它们的⼤⼩呢?
给定两个串:s="a1a2……an",t="b1b2……bm"。当满⾜以下条件之⼀时,s < t。
1. n < m, 且 ai=bi( i = 1, 2, ……, n)。
unicode码和ascii码区别
⽐如 s = "hap", t = "happy", 就有 s < t,因为 t ⽐ s 多两个字符。
2. 存在某个k < min(m, n),使得ai=bi (i=l, 2, ……, k—1), ak < bk。
例如当s= “happen”,t= “happy”,因为两串的前4个字母均相同,⽽两串第5个字母(k值),字母e的ASCII码是101,⽽字母y的ASCH码是121,显然e < y,
有同学如果对这样的数学定义很不爽的话,那我再说⼀个字符串⽐较的应⽤。我们的英语词典,通常都是上万个单词的有序排列。就⼤⼩⽽⾔,前⾯的单词⽐ 后⾯的要⼩。你在査单词的过程,其实就是在⽐较字符串⼤⼩的过程。
嗯?有同学说,从不査纸质词典,都是⽤电⼦词典。电⼦词典査单词实现的原理,其实就是字符串这种数据结构的典型应⽤,随着我们之后的讲解,⼤家就会明⽩。
延伸阅读
此⽂章所在专题列表如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。