如何检查值是否与string匹配

在这里学C的主要思想是冰冻的。

我有一个像这样的结构:

char *sname; ........ players[i].sname 

等于“詹姆斯”。

我需要检查值之间的平等,如下所示:

 if (players[i].sname == 'Lee') 

但没有太多的运气。 是否有我应该使用的str函数,或者是否有修复我的if语句。 这不是atm工作。

简短的回答: strcmp()

长答案:所以你有这个:

 if(players[i].sname == 'Lee') 

这在几个方面是错误的。 首先,单引号表示C中的“字符字面量”而不是“string字面量”

其次,更重要的是, "string1" == "string2"不比较string,它比较char * s或指向字符的指针。 它会告诉你两个string是否存储在同一个内存位置 。 这意味着他们是平等的,但一个错误的结果并不意味着他们是不平等的

strcmp()将基本上通过并比较string中的每个字符,停止在不相等的第一个字符,并返回两个字符之间的差异(这就是为什么你必须说strcmp() == 0!strcmp()相等)。

还要注意函数strncmp()memcmp() ,它们与strcmp()类似,但是更安全。

你应该使用strcmp()

 if (strcmp(players[i].sname, "Lee") == 0) { ... 

还要注意C中的string被双引号包围: "" 。 单个字符被单引号括起来: '' 。 我不确定你的编译器可能会用'Lee'来做什么,但几乎肯定不是你想要的。

你会从头文件<string.h>寻找strcmp()

请注意,您需要一个string – 'Lee'不是一个string,而是一个多字符常量,这是允许的但很less有用的,不仅仅是因为表示法是由编译器定义的,而不是由C标准定义的。

如果你想比较两个string – firstsecond调用指针,那么你写:

 if (strcmp(first, second) == 0) // first equal to second if (strcmp(first, second) <= 0) // first less than or equal to second if (strcmp(first, second) < 0) // first less than second if (strcmp(first, second) >= 0) // first greater than or equal to second if (strcmp(first, second) > 0) // first greater than second if (strcmp(first, second) != 0) // first unequal to second 

在我看来,这就明确了比较是什么,所以应该使用符号。 请注意, strcmp()可能会返回任何负值以指示“小于”或任何正值来指示“大于”。

要谨慎使用strncmp()而不是strcmp() ,这是在一个答案中build议的。 如果你有:

 if (strncmp(first, "command", 7) == 0) 

那么如果first包含"commander" ,则该比赛将是有效的。 如果这不是你想要的,但是你想使用strncmp() ,你会写:

 if (strncmp(first, "command", sizeof("command")) == 0) 

这将正确拒绝"commander"