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

写了个strstr()函数,为什么不起作用呢,该如何解决

2013-11-13 
写了个strstr()函数,为什么不起作用呢自己写了个函数实现strstr函数的功能,可不起作用,大侠能帮忙看看嘛?

写了个strstr()函数,为什么不起作用呢
自己写了个函数实现strstr函数的功能,可不起作用,大侠能帮忙看看嘛?非常感谢


const char *mystrstr(const char *string,const char *strCharSet)
{
int i=0;
int j=0;
while(string[i]!='\0'&&strCharSet[j]!='\0')
{
if(string[i]==string[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(strCharSet[j]=='\0')
return (string+i-j);
else 
return NULL;
}

int _tmain(int argc, _TCHAR* argv[])
{
const char *test;
test=mystrstr("testone","st");
printf("%s\n",test);
std::cin.get();
std::cin.get();
return 0;
}

strstr函数的功能是从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1中str2起始位置的指针,如果没有,返回null。
[解决办法]
自己对照对照吧
http://www.opensource.apple.com/source/xnu/xnu-792.13.8/libsa/strstr.c
[解决办法]

const char *mystrstr(const char *string,const char *strCharSet)
{
      while(*string != '\0')  
      {  
          const char *p = string;  
          const char *q = strCharSet;  
          const char *res = NULL;  
          if(*p == *q)  
          {  
                res = p;  
                while(*p && *q && *p++ == *q++)  
                ;  
                  
                if(*q == '\0')  
                      return res;                      
          }  
          string++;  
      }  
      return NULL;  
}



引用:
自己写了个函数实现strstr函数的功能,可不起作用,大侠能帮忙看看嘛?非常感谢

const char *mystrstr(const char *string,const char *strCharSet)
{
int i=0;
int j=0;
while(string[i]!='\0'&&strCharSet[j]!='\0')
{
if(string[i]==string[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(strCharSet[j]=='\0')
return (string+i-j);
else 
return NULL;
}

int _tmain(int argc, _TCHAR* argv[])
{
const char *test;
test=mystrstr("testone","st");
printf("%s\n",test);
std::cin.get();
std::cin.get();
return 0;
}

strstr函数的功能是从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1中str2起始位置的指针,如果没有,返回null。

[解决办法]
楼主一重循环能实现吗!!

还是好好跟踪下你的程序吧.

下断点, 然后F5执行, 你就知道你的程序错在哪里了.
[解决办法]
为啥都答非所问呢……
string[i] == string[j]
改为:
string[i] == strChrSet[j]
[解决办法]
是strCharSet
用手机写代码真不是人干的……
[解决办法]
支持2楼,这样才不会改变原有数据,高手啊
[解决办法]

//这里是想干啥? 比较?
  if(string[i]==string[j])
        {
            i++;
            j++;
        }
        else
        {
            i=i-j+1;
            j=0;
        }

[解决办法]
if(string[i]==string[j])
        {


            i++;
            j++;
        }
        else
        {
            i=i-j+1;
            j=0;
        }


这个判断写的有问题。
[解决办法]
if(string[i]==string[j])
改成if(string[i]==strCharSet[j])

这个跟下面官网源码的实现原理都是一样的
http://www.opensource.apple.com/source/xnu/xnu-792.13.8/libsa/strstr.c

官网源码看似2层循环,其实也只是把str2循环一次,楼主的
if(string[i]==strCharSet[j])
        {
            i++;
            j++;
        }
跟官网的while (strncmp(in, str, len) != 0)有异曲同工之妙

热点排行