簡體   English   中英

如何以不區分大小寫的方式比較兩個字符?

[英]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> 中有一對函數可以幫助您。

這些函數是: tolowertoupper 它們將 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.

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