读书人

写了个strstr()函数为什么不起作用

发布时间: 2013-11-13 14:04:18 作者: rapoo

写了个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)有异曲同工之妙

读书人网 >C++

热点推荐