如何进行`if`检查键入的单词是不是等于C中字符串列表中的某个单词? [复制]

Posted

技术标签:

【中文标题】如何进行`if`检查键入的单词是不是等于C中字符串列表中的某个单词? [复制]【英文标题】:How can I do an `if` check if the typed word is equal to some word in a string list in C? [duplicate]如何进行`if`检查键入的单词是否等于C中字符串列表中的某个单词? [复制] 【发布时间】:2021-06-15 10:57:15 【问题描述】:

如何使用if 检查输入的单词是否等于 C 中字符串列表中的某个单词? 示例:

#include <stdio.h>

int main()

char input[20];
char* strings[] = "apple","banana";

printf("try to hit one of my favorite fruits:\n");
scanf("%s", input);

if(input == strings[])
     printf("you got it right %s is one of my favorite fruits!", input);
else
    printf("you missed");
     


【问题讨论】:

C 字符串是数组。你不能使用==。使用 strcmp 或 strncmp。 至少使用scanf("%19s", input);或者更安全的输入方式。 【参考方案1】:

我猜这就是你要找的。​​p>

#include<stdio.h>
#include<string.h> //you need string.h to use strcmp()

int main()

char input[20];
char* strings[] = "apple","banana";

printf("try to hit one of my favorite fruits:\n");
scanf("%s", input);
for(int i=0;i<2;i++) //2 is the length of the array
if(strcmp(input,strings[i])==0) //strcmp() compares two strings
     printf("you got it right %s is one of my favorite fruits!", input);
     return 0;


printf("you missed");

【讨论】:

强烈建议使用sizeof(strings) / sizeof(*strings) 作为数组长度而不是文字2【参考方案2】:

要在 C 中比较字符串,必须使用 strcmp() 函数:

bool hit = false;
for (size_t i = 0; !hit && i < sizeof strings / sizeof *strings; ++i)

  hit = strcmp(input, strings[i] == 0);


if (hit)

  printf("You hit one of my favorites!\n");

else

  printf("You missed, too bad.\n");

请注意,一旦找到命中,循环就会结束,然后在循环之后检查hit 变量以确定要打印的正确消息。

您还应该检查scanf() 没有失败,因为这个原因它有一个返回值。

【讨论】:

【参考方案3】:

if 语句中的条件

f(input == strings[])

至少在语法上是不正确的,因为在下标运算符strings[] 中缺少索引。

但是如果你会像例子一样正确地写出条件句法

f(input == strings[0])

这没有意义,因为比较两个指针而不是比较字符串。

要比较两个字符串,您应该使用标准 C 字符串函数 strcmp

您可以编写一个单独的函数来检查字符串是否存在于指向字符串的指针数组中。

例如

#include <stdio.h>
#include <string.h>

int is_present( const char * s1[], size_t n, const char *s2 )

    size_t i = 0;
    
    while ( i < n && strcmp( s1[i], s2 ) != 0 ) ++i;
    
    return i != n;


int main(void) 

    char input[20];
    const char * strings[] =  "apple", "banana" ;
    const size_t N = sizeof( strings ) / sizeof( *strings );

    printf( "try to hit one of my favorite fruits:\n" );
    scanf( "%s", input );

    if( is_present( strings, N, input ) )
        printf("you got it right %s is one of my favorite fruits!", input);
    else
        printf("you missed");
    
    
    return 0;

程序输出可能看起来像

try to hit one of my favorite fruits:
apple
you got it right apple is one of my favorite fruits!

【讨论】:

以上是关于如何进行`if`检查键入的单词是不是等于C中字符串列表中的某个单词? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查字符串是不是包含特定单词?

如何检查字符串是不是包含特定单词?

如何检查我的字符串是不是等于null?

JavaScript/jQuery - 如何检查字符串是不是包含特定单词

如何使用 PHP 检查一个单词是不是包含在另一个字符串中?

如何正确检查字符串是不是不包含特定单词?