繁体   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