[英]How do I compare two characters in a case-insensitive manner?
我正在創建一個簡單的石頭剪刀布游戲,我從標准輸入中讀取兩個字符。 這些字符中的每一個都應該是以下之一: 'r'
(岩石)、 'p'
(紙)或's'
(剪刀)。
為了確定獲勝者,我比較了這樣的字符:
if ( player1 == 'r' && player2 == 's' )
printf( "Player-1 wins! Rock breaks scissors!\n" );
如果兩個字符都以小寫形式輸入,則此比較可以正常工作。 但是,如果其中一個字符是大寫( 'R'
、 'P'
或'S'
),則比較將無法正常進行。 我希望比較能夠正確處理小寫和大寫字符。
我的想法是使比較看起來像這樣:
if ( player1 == 'r','R' && player2 == 's','S')
printf( "Player-1 wins! Rock breaks scissors!\n" );
如何正確執行此比較?
使用此函數: tolower
,因此每次比較都將與轉換為小寫字母后進行比較的字母進行比較。
if (tolower(player1) == 'r' && tolower(players2) == 's')
頭文件 <ctype.h> 中有一對函數可以幫助您。
這些函數是: tolower
和toupper
。 它們將 char 作為參數並分別以小寫/大寫形式返回此值(如果 char 不是字母,則返回未更改的值)。
您可以做的是轉換為大寫或小寫並與單個字母進行比較。
if (tolower(player1) == 'r' && tolower(player2) == 's')
或者
if (toupper(player1) == 'R' && toupper(player2) == 'S')
我上面提到的這種方式需要更少的代碼並且更容易閱讀。
但是,如果您不想使用這些函數,以下代碼是您想要的結果所需的修復:
if ((player1 == 'r' || player1 == 'R') && (player2 == 's' || player2 == 'S'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.