【问题标题】:Comparing string in C [duplicate]比较C中的字符串[重复]
【发布时间】:2014-04-11 18:48:16
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int main()
{
char array1 [50];
char array2 [50];
printf("enter a string:\n");
fgets(array1, 50, stdin);
printf("enter a string2:\n");
fgets(array2, 50, stdin);
if (array1==array2){
    printf("True");
}

}

如果我两次输入相同的字符串,此代码应打印为 true。然而事实并非如此。我该如何解决这个问题?

【问题讨论】:

  • 数组是指针。您的 == 比较地址位置而不是字符元素
  • @Micka:不,数组不是指针。阅读comp.lang.c FAQ 的第 6 节。 array1==array2 进行指针比较是正确的,但这只是因为数组表达式转换为指针。
  • 使用函数strncmp。此链接适用于 C++,但在 C 中的工作方式相同。
  • @eventHandler: 为什么是strncmp 而不是strcmp
  • 是的,这样更好。我昨天正在使用 strncmp 比较某种字符串。弄糊涂了。 strcmp 更适合这个。

标签: c string


【解决方案1】:

要比较字符串,您可以使用strcmp 它在string.h 中定义

array1array2 是指向字符串开头的指针。因此这段代码array1==array2 比较的是指针而不是字符串。

【讨论】:

    【解决方案2】:

    使用strcmp点赞

     if (!strcmp(array1,array2))
        printf("true\n");
    

    strcmp(3)

    您的比较array1 == array2 正在比较地址(因此不起作用)。

    【讨论】:

    • 恕我直言if (strcmp(array, array2) != 0) 更清晰。
    【解决方案3】:

    您正在将两个指针与数组的内存位置进行比较。

    你可以使用strcmp:

    if (strcmp(str1,str2) == 0) {
        printf("they match!");
    }
    

    或者更详细地说,您需要比较数组中每个条目的值:

    int i;
    int match = 1;
    for (i = 0; i < 50; i++) {
        if (array1[i] != array2[i]) {
            match = 0;
            break;
        }
    }
    if (match == 1) {
        printf("They match");
    } else {
        printf("They do not match");
    }
    

    【讨论】:

      【解决方案4】:

      您正在比较那里的两个指针。你要strncmp(array1, array2, 50) == 0

      【讨论】:

        【解决方案5】:

        您应该使用strcmpstrncmp

        例如:

        int result = strncmp(string1, string2, compareLimit);,其中compareLimit 是要比较的字符数。

        result 将告知您0 是否相等或string1 是否大于或小于string2

        【讨论】:

          【解决方案6】:

          这取决于你的意思。您想要完全相同的字节序列,还是依赖于区域设置的比较?

          第一个处理为strcmp(),第二个调用strcoll()。两者都在&lt;string.h&gt;

          【讨论】:

            猜你喜欢
            • 2018-07-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多