鱼C论坛

 找回密码
 立即注册
查看: 3316|回复: 9

[已解决]这段代码是什么意思啊

[复制链接]
发表于 2017-6-5 21:50:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请帮忙注释一下
int cmp( char *str1, char *str2 )
{
      int i = 0, j = 0;

      while( str1[i] )
      {
            while( str2[j] == str1[i] )
            {
                  i++;
                  j++;
                  if( !str2[j] )
                  {
                        return 0;
                  }
            }
            j = 0;
            i++;
      }

      return -1;

}
最佳答案
2017-6-7 19:55:57
while( str1[i] )
      {
            while( str2[j] == str1[i] )
            {
                  i++;
                  j++;
                  if( !str2[j] )
                  {
                        return 0;
                  }
            }
            j = 0;
            i++;
      }
这一段是用来检测str1中是否包含str2。
其中,
while( str2[j] == str1[i] )
            {
                  i++;
                  j++;
                  if( !str2[j] )
                  {
                        return 0;
                  }
            }
这一段是检测 str2[j] == str1[i]是否成立直到两种情况会退出。
第一种,你应该能想到,str2[j]不等于str1[i],条件为假,自动跳出。
第二种,str2一直检测到了最后都没有跳出返回0,即if( !str2[j] )。return的功能是为函数返回一个结果,函数的主要目的就是求结果。当得到这个结果,直接退出整个函数。
return -1;
返回一个标明错误的指示,即-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-7 11:14:57 | 显示全部楼层
str1包含str2 就返回0
否则返回-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-7 15:23:23 From FishC Mobile | 显示全部楼层
能详细说明一下吗
我不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-7 18:41:32 From FishC Mobile | 显示全部楼层
既然是否则返回-1
为什么没有else
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-7 19:55:57 | 显示全部楼层    本楼为最佳答案   
while( str1[i] )
      {
            while( str2[j] == str1[i] )
            {
                  i++;
                  j++;
                  if( !str2[j] )
                  {
                        return 0;
                  }
            }
            j = 0;
            i++;
      }
这一段是用来检测str1中是否包含str2。
其中,
while( str2[j] == str1[i] )
            {
                  i++;
                  j++;
                  if( !str2[j] )
                  {
                        return 0;
                  }
            }
这一段是检测 str2[j] == str1[i]是否成立直到两种情况会退出。
第一种,你应该能想到,str2[j]不等于str1[i],条件为假,自动跳出。
第二种,str2一直检测到了最后都没有跳出返回0,即if( !str2[j] )。return的功能是为函数返回一个结果,函数的主要目的就是求结果。当得到这个结果,直接退出整个函数。
return -1;
返回一个标明错误的指示,即-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-8 20:55:22 | 显示全部楼层
  1. #include <stdio.h>



  2. void main()
  3. {
  4.       char str[40];
  5.       int cmp( char *str1, char *str2 );

  6.       printf("Please enter the website you like the best : ");
  7.       scanf("%s", str);

  8. #ifndef CORRECT
  9. #define CORRECT "fishc.com"
  10. #endif

  11.       if( cmp( str, CORRECT ) == 0 )
  12.       {
  13.             printf("\nYeah! You are a smart man!\n\n");
  14.       }
  15.       else
  16.       {
  17.             printf("\nYou fool! Man!!\n\n");
  18.       }

  19. }

  20. int cmp( char *str1, char *str2 )
  21. {
  22.       int i = 0, j = 0;

  23.       while( str1[i] )
  24.       {
  25.             while( str2[j] == str1[i] )
  26.             {
  27.                   i++;
  28.                   j++;
  29.                   if( !str2[j] )
  30.                   {
  31.                         return 0;
  32.                   }
  33.             }
  34.             j = 0;
  35.             i++;
  36.       }

  37.       return -1;

  38. }
复制代码

这是完整的代码
这里的STR 和STR1 STR2是什么关系
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-8 22:27:27 | 显示全部楼层
这是第九章的第三节的内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-8 22:32:24 | 显示全部楼层
str2是不是等于fishc.com
为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-8 23:53:20 | 显示全部楼层
str1和str2是形参。
str是实参
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-8 23:56:04 | 显示全部楼层
str2是一个形参,它在没有赋值前只是个指针变量。
只有在cmp( str, CORRECT )中,str2才被赋值fishc.com

我建议你重学一遍函数。c++的话可以看c++ primer plus这本书。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 11:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表