字串處理函式(五) strcmp

2021-05-07 20:50:47 字數 482 閱讀 3361

字串比較函式,這個函式也比較常用:

看看上面**有問題嗎?

乍看,這個程式思路非常清楚,應該沒什麼問題的,是這樣嗎?在我們能嘗試的一些字串中這個函式是的確沒問題的,而且在vc上拿它和string.h中的strcmp函式進行比較,發現兩個函式每次的結果都是一樣的。而我們往往遺忘了一種情況:如果乙個字元值的ascii碼值超過127,該如何比較?也就是說,這類字元是非常規、不常用的字元。如果採用上面的方法,會得到相反的結果。如字元¥的ascii碼值在850 (latin 1)為190,將其和"a"比較,上面的**得到的結果是-1;而使用標準庫函式得到的結果是1。理論上講,ascii值大的應該返回1,而上面程式剛好相反。

具體原因在於,對於超過127的字元在使用上面的函式時(預設上**中實際也都是這麼處理的)將該字串視為符號(signed)的字串,所以超過127的字元或按照對應的2進製補碼轉換為對應的負數,從而產生上面錯誤的結果。如¥所存的值為190-256=-66,-66<97,所以程式判斷¥

c語言字串比較函式strcmp

strcmp s1,s2 說明 當s1s2時,返回值 0 兩個字串自左向右逐個字元相比 按ascii值大小相比較 直到出現不同的字元或遇 0 為止。char str aaaa ch bbbbb if strcmp str,ch 0 成立就是字串str在字串ch後面 if strcmp str,ch ...

字串的比較 strcmp

函式原型 extern int strcmp const char s1,const char s2 所在標頭檔案 在.c檔案需加入string.h標頭檔案 在vc6或vs2012中,沒有加入該標頭檔案,仍能正常執行,但會出現warning strcmp undefined 在.cpp中則可以不加 ...

模擬實現字串比較函式 strcmp

題目 不使用庫函式,模擬實現字串比較函式strcmp。例如 比較 abcde bc 和 bcde bcde 和 abcd ab 分析 字串在進行比較時,逐個字元進行比較其ascii碼值。字串1大於字串2,返回1,小於,返回 1,等於返回0.當兩字串所有字元的ascii碼值相等且字元個數相等時,兩字串...