如何比較串的大小

其實就是比較串的內部編碼
服務器君一共花費了169.825 ms進行了6次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

兩個數字,很容易比較大小。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)。

比如 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,

  • 有同學如果對這樣的數學定義很不爽的話,那我再說一個字符串比較的應用。我們的英語詞典,通常都是上萬個單詞的有序排列。就大小而言,前面的單詞比 后面的要小。你在査找單詞的過程,其實就是在比較字符串大小的過程。

嗯?有同學說,從不査紙質詞典,都是用電子詞典。電子詞典査找單詞實現的原理,其實就是字符串這種數據結構的典型應用,隨著我們之后的講解,大家就會明白。

延伸閱讀

此文章所在專題列表如下:

  1. 數據結構里的串是什么東西?
  2. 如何比較串的大小
  3. 串的抽象數據類型ADT
  4. 串的順序存儲結構
  5. 串最基本的5個操作的C實現
  6. 尋找子串在主串中的位置
  7. 如何在串中插入串
  8. 如何在串中刪除特定長度的子串
  9. 字符串中的子串替換
  10. 題外話:談談malloc()和free()

本文地址:http://www.snpmgr.live/librarys/veda/detail/2402,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.snpmgr.live/librarys/veda/detail/2402

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏。

大家都在看

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《數據結構與算法分析:C++描述(第3版)》 維斯 (Mark Allen Weiss) (作者), 張懷勇 (譯者), 等 (譯者)

《數據結構與算法分析:C++描述(第3版)》是數據結構和算法分析的經典教材,書中使用主流的程序設計語言C++作為具體的實現語言。書的內容包括表、棧、隊列、樹、散列表、優先隊列、排序、不相交集算法、圖論算法、算法分析、算法設計、攤還分析、查找樹算法、k-d樹和配對堆等?!稊祿Y構與算法分析:C++描述(第3版)》適合作為計算機相關專業本科生的數據結構課程和研究生算法分析課程的教材。本科生的數據結構課程可以使用《數據結構與算法分析:C++描述(第3版)》第1章~第9章,多學時課程還可以講解第10章;研究生算法分析課程可以使用第6章~第12章。

更多計算機寶庫...

燃烧吧足球登陆 王者捕鱼赢话费下载 广西快乐10分官网 新疆35选7开奖结果今天 如何买股票 北京pk赛车杀号冠军 捕鱼来了刷弹头技巧 吉祥棋牌室? 南京麻将下载免费版 广西快乐十分包号玩法 重庆幸运农场复试公式 广东快乐10分 北京快3开奖走势 怎么网上兼职赚钱 贵阳麻将怎么打 30选5 河南22选五今天开奖公告