Liu4Real 发表于 2020-2-6 18:37:27

求助第22课课后作业!非常感谢!!

请问大佬们这段代码是如何比较两个字符串是相等的呢?

if (*target1 == '\0' && *target2 == '\0')
      {
                printf("两个字符串完全一致!\n");
        }
这样写仅是比较两个字符串是否同时结束吗?

为什么不能用str1==str2或*target1==*target2来比较是否相同呢?

感谢解答!!


答案代码如下:

#include <stdio.h>

#define MAX 1024

int main()
{
      char str1;
      char str2;

      char *target1 = str1;
      char *target2 = str2;

      int index = 1;

      printf("请输入第一个字符串:");
      fgets(str1, MAX, stdin);

      printf("请输入第二个字符串:");
      fgets(str2, MAX, stdin);

      while (*target1 != '\0' && *target2 != '\0')
      {
                if (*target1++ != *target2++)
                {
                     break;
                }
                index++;
      }

      if (*target1 == '\0' && *target2 == '\0')
      {
                printf("两个字符串完全一致!\n");
      }
      else
      {
                printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index);
      }

      return 0;
}

召唤风云 发表于 2020-2-6 18:59:35

如果两个字符串完全一致,就不会触发break。否则就会触发break(还有一种情况),那么你说的这句话显然是否定的,如果一一个短的字符串的所有子符和一个长的字符串前半部分相等,不会触发break,他们就不会同时结束,条件也是否定的。第1种方法不行,因为字符串不能直接比较。第2种方法可能出现误判,就是前面那种情况。

Liu4Real 发表于 2020-2-6 23:29:55

召唤风云 发表于 2020-2-6 18:59
如果两个字符串完全一致,就不会触发break。否则就会触发break(还有一种情况),那么你说的这句话显然是否定 ...

这两种方法为什么不行我明白了谢谢,但还是不太明白这段程序到底是怎么判定两个字符串相同的呢?能麻烦再详细解释一下吗谢谢!

召唤风云 发表于 2020-2-7 13:31:18

总共有三种情况。1,两个字符串完全一致。2,一个短字符串和一个长字符串的前半部分完全一致。3,两个字符串长的都不一样。第3种情况会触发break,第2种情况不会。第3种情况显然不符合条件。而第2种情况,两个字符串不会同时结束。所以这两种情况都是字符串,不完全一致。剩下的情况就是字符串完全一致。

Liu4Real 发表于 2020-2-7 15:40:32

召唤风云 发表于 2020-2-7 13:31
总共有三种情况。1,两个字符串完全一致。2,一个短字符串和一个长字符串的前半部分完全一致。3,两个字符串长 ...

明白了!十分感谢!
页: [1]
查看完整版本: 求助第22课课后作业!非常感谢!!