Charlie2022 发表于 2022-3-5 16:37:17

C语言 第19课字符串处理 模仿strncmp函数实现功能

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

int main()
{
        char str1;
        char str2;
        int i = 0;///读取数组中的字符
        unsigned int n;///接受比较的字符数
               
        printf("请输入第一个字符串:");
        while((str1 = getchar()) != '\n');

        printf("请输入第二个字符串:");
        i = 0;
        while((str2 = getchar()) != '\n');

        printf("请输入比较的字符数:");
        scanf("%u", &n);

        for(i = 0; i < n; i++)
        {
                if(str1 - str2)
                {
                        i++; ///这里为什么要i++?我自己没写这个,所以错了,输不出来正确的答案!
                        break;
                }
        }

        printf("比较的结果是:%d\n", str1 - str2);

        return 0;
}

大马强 发表于 2022-3-5 17:14:56

这个应该和最后的输出语句有关
printf("比较的结果是:%d\n", str1 - str2);
你想为啥这句要用一个str1 - str2而不是用str1 - str2?
原因在于如果两个字符串是一样的,说明for语句中的i是的等于n的
for(i = 0; i < n; i++)
      {
                if(str1 - str2) //只要str1 - str2差不为0都为真
                {
                        i++;
                        break;
                }
      }
举个具体例子,比如str1 = “abcdf”, str2="abcdz",比较前4个字符
如果最后的输出不用str1 - str2,那结果就是 str1 - str2 即 'f' - 'z',
这个样的话结果就会出错,正确的输出应该是 0 ,但实际输出是 -20
所以必须有个i++,因为要照顾到 str1 - str2

jackz007 发表于 2022-3-5 17:15:56

#include <stdio.h>

int cmpnstr(char s1[] , char s2[] , int n)
{
      int i , r                                                                                 ;
      for(r = i = 0 ; i < n && s && s2 && s1 == s2 ; i ++)                        ;
      if(i < n) r = s1 - s2                                                               ; // 如果 i == n 说明 s1、s2 前 n 个字符完全相同 r = 0,i < n 则说明不相同,首个不同的字符的索引为 i
      return r                                                                                  ;
}

int main(void)
{
      char str1 , str2 , c                                                          ;
      int i , n                                                                                 ;
      printf("请输入第一个字符串:")                                                            ;
      for(i = 0 , str1 = '\0' ; (c = getchar()) != '\n' ; i ++ , str1 = '\0') str1 = c ;

      printf("请输入第二个字符串:")                                                            ;
      for(i = 0 , str2 = '\0' ; (c = getchar()) != '\n' ; i ++ , str2 = '\0') str2 = c ;

      printf("请输入比较的字符数:")                                                            ;
      scanf("%d" , & n)                                                                         ;
      if(n > 0) printf("比较的结果是:%d\n", cmpnstr(str1 , str2 , n))                        ;
}

jhq999 发表于 2022-3-5 17:17:33

printf("比较的结果是:%d\n", str1 - str2);//去掉i++,改成这样试试,不明白输出str1 - str2有什么意义,谁能解释一下
页: [1]
查看完整版本: C语言 第19课字符串处理 模仿strncmp函数实现功能