心鲜旅人 发表于 2021-8-11 17:47:04

小甲鱼是不是写错了?

课后作业中用指针来实现strncmp函数他的代码是这样的:
#include <stdio.h>

#define MAX 1024

int main()
{
      char str1;
      char str2;

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

      char ch;
      int index = 1, n;

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

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

      printf("请输入需要对比的字符个数:");
      scanf("%d", &n);

      while (n && *target1 != '\0' && *target2 != '\0')
      {
                ch = *target1;
                if (ch < 0)
                {
                        if (*target1++ != *target2++ || *target1++ != *target2++)
                        {
                              break;
                        }
                }
                if (*target1++ != *target2++)
                {
                     break;
                }
                index++;
                n--;
      }

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

      return 0;
}
为嘛第三十行写了两遍*target1++ != *target2++呢

大马强 发表于 2021-8-11 17:58:39

有可能是判断条件为,target1下一个和下下一个字符和target2不相等
if (*target1++ != *target2++ || *target1++ != *target2++)

Max472 发表于 2021-8-11 18:14:51

这一句是包含在
if ( ch < 0 )
{
}
里边的,ch<0 表示汉字,汉字是用两个字节存储的,所以用两句
*target1++ != *target2++
来判断
页: [1]
查看完整版本: 小甲鱼是不是写错了?