首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个容易的函数

2013-03-16 
一个简单的函数char *strstr(const char *s1, const char *s2){int nif (*s2){while (*s1){for (n0 *(s

一个简单的函数



char *strstr(const char *s1, const char *s2)
{
int n;
if (*s2)
{
while (*s1)
{
for (n=0; *(s1 + n) == *(s2 + n); n++)
{
if (!*(s2 + n + 1))
return (char *)s1;
}
s1++;
}
return NULL;
}
else
return (char *)s1;
}


求大神指教6行以后是什么意思,本人新手
[解决办法]

char *strstr(const char *s1, const char *s2)
{//函数 判断S1从开始位置开始,是否包含S2子串,是则返回*s1,否则返回NULL
  int n;//用于字符串循环
  if (*s2)
  {//*s2不为空
    while (*s1)
    {//循环直到*s1为空,及S1字符串结束
      for (n=0; *(s1 + n) == *(s2 + n); n++)
      {//S1字符串从开始位置开始与S2相同的字符
        if (!*(s2 + n + 1))
        //S2结束,表示S1从第一个字符开始包含S2子串
          return (char *)s1;
      }
      s1++;
    }
    //表示S2长度大于S1,及S1从第一个字符开始不包含子串S1
    return NULL;
  }
  else
    //S2为空
    return (char *)s1;
}

[解决办法]
艰涩的代码通常不是被读懂而是被单步调试懂的。

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。

对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

热点排行