簡體   English   中英

比較ASCII值的最佳方法

[英]Best way to compare ASCII value

大家好,我剛剛開始學習c類,但是我對比較C語言中的ASCII值有疑問。

假設我有一個單詞“ hello”,我想檢查ASCII表中的“ h”是否匹配104,通常會匹配104。 因此,盡管我似乎發現此方法並不十分有效,但我正在使用以下代碼來執行此操作。 所以我想知道是否還有其他方法。

char word [] = "hello";
if (("%d", word[0]) == 104) puts("Yay");

抱歉,這是一個愚蠢的問題,但在我看來似乎並不那么有效。

非常感謝!

編輯:我發現效率低下的部分是:

("%d", word[0])

您的("%d", word[0])看起來像是printf調用,但缺少printf 但是,由於您沒有調用函數,因此實際上根本沒有這樣的功能。 它只是一個逗號運算符,它計算左參數( "%d" ),丟棄結果,並使用右參數。

"%d"是一個沒有副作用的表達式,因此評估它完全不起作用。

您的測試可以簡化為if(word[0] == 104) ,它執行相同的操作。 甚至更好的是,將其縮短為if(word[0] == 'h') ,該值仍然相同但可讀。

您可以在C中直接比較charint類型,因此下面的代碼:

char word[]  = "hello";
if(word[0] == 104) puts("Yay");

如果相當於您的代碼段。

char word [] = "hello";
if (("%d", word[0]) == 104) puts("Yay");

等效代碼為:

if('h' == 104) puts("Yay");

最后的轉換:

puts("Yay");
  • 如果使用多個用逗號分隔的表達式,則將按順序對它們進行求值,最后一個確定結果。
  • 另外,您可以像在我的答案中一樣直接使用字符常量。 只是提防多字符常量,它們是合法的但不能移植,因此也沒有真正的用處。
  • 接下來,即使沒有啟用優化,大多數編譯器在不斷折疊的情況下也可以做得不錯,因此效率不是很高。
  • 最后,如果可能的話,這些常量用於刪除控制結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM