如何比较C中的两个字符串?

问题描述

我想比较 2 个字符串,如果它们相等,它应该打印一些东西。我已经看到了一个帖子,但它对我不起作用。帖子:How to compare strings in an "if" statement?

代码

int main(void) {

    char string[100];
    
    printf("Please enter something: ");
    fgets(string,100,stdin);

    if (strcmp(string,"a") == 0)
        printf("a");

    else if (strcmp(string,"b") == 0)
        printf("b");

    else if (strcmp(string,"c") == 0)
        printf("c");

    else
        printf("something else");


    return (0);
}

虽然我输入了 a,但它打印出了“别的东西”。

解决方法

函数 fgets 可以将您应该删除的换行符 '\n' 附加到输入的字符串。例如

fgets(string,100,stdin);
string[ strcspn( string,"\n" ) ] = '\0';

fgets(string,stdin);
char *p = strchr( string,'\n' );
if ( p != NULL ) *p = '\0';

来自 C 标准(7.21.7.2 fgets 函数)

2 fgets 函数读取最多比读取的数量少 1 来自 stream into 指向的流中的 n 指定的字符 s 指向的数组。 在 a 之后不会读取额外的字符 换行符(保留) 或在文件结束之后。一个空 字符在读入的最后一个字符后立即写入 数组。

,

当用户按下 Enter 键时,fgets() 也会接受换行符。因此,为了从存储在 `string[100] 中的内容中删除它,只需更改:

fgets(string,stdin);

strtok(fgets(string,stdin),"\n");

删除换行符。只需确保包含 #include <string.h> 标头

进一步阅读

如果您想知道 strtok 的作用,请查看 https://www.tutorialspoint.com/c_standard_library/c_function_strtok.htm

C 库函数 char *strtok(c​​har *str,const char *delim) 使用分隔符 delim 将字符串 str 分解为一系列标记。

char *strtok(char *str,const char *delim)

,

如果您确实进行了一些研究,您可以自己回答这个问题。

int main(void) {

    char string[100];
    
    printf("Please enter something: ");
    fgets(string,stdin);

    if (strcmp(string,"a") == 0)
        printf("a");

    else if (strcmp(string,"b") == 0)
        printf("b");

    else if (strcmp(string,"c") == 0)
        printf("c");

    else
    {
        printf("something else - lets check why:\n Entered string:\n");
        for(size_t n = 0; n <= strlen(string); n++)
        {
            printf("string[%2zu] = ",n);
            switch(string[n])
            {
                case '\n':
                    printf("\\n");
                    break;
                case '\r':
                    printf("\\r");
                    break;
                case 0:
                    printf("null char");
                    break;
                default:
                    if(string[n] < ' ' || string[n] > 127)
                    {
                        printf("\\x%x",(unsigned)string[n]);
                    }
                    else
                    printf("'%c'",string[n]);
            }
            printf("\n");
        }
    }


    return (0);
}

https://godbolt.org/z/afb3Ej7E9

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...