如何比較串的大小

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

兩個數字,很容易比較大小。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本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

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

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

《人月神話》 弗雷德里克·布魯克斯 (作者), 汪穎 (譯者)

《人月神話》原文:The Mythical Man-Month: The Essays on Software Engineering, 2nd ed.在軟件領域,很少能有像《人月神話》一樣具有深遠影響力并且暢銷不衰的著作。Brooks博士為人們管理復雜項目提供了最具洞察力的見解。既有很多發人深省的觀點,又有大量軟件工程的實踐。本書內容來自Brooks博士在IBM公司System/360家族和OS/360中的項目管理經驗。該書英文原版一經面世,即引起業內人士的強烈反響,后又譯為德、法、日、俄中等多種語言,全球銷量數百萬冊。確立了其在行業內的經典地位。

更多計算機寶庫...

燃烧吧足球登陆