我正在尝试从头开始编写 strstr 函数。我在调试器中逐行检查了我的代码,它工作正常。但是,它没有正确保存其搜索的子字符串的开头。因此,它没有正确返回它。我没有太多的编程经验,所以我的代码有点混乱和复杂。但是,它在大多数情况下确实有效。下面是我的代码(为我的教授发表评论,让大家看看我做了什么)。(另外,我的教授已经表示接受 goto 功能)
char *strgstr(const char *str1, const char *str2)
{
//I went through this function line by line with the debugger
//The only problem with it is when I go to save the location of the
//substring in str1.
//I posted a question on stackoverflow and I was able to get it to compile
//but it still doesn't save and return properly. The rest of the function works.
int len_str1=strlen(str1);
int len_str2=strlen(str2);
char *save_str=NULL;
int i=0;
for(; i<len_str1; i++)
{
there:
if(str1[i]==str2[0]) //checks if this is the beginning of str2
{
save_str=(char*)str1[i]; //This is where the problem is.
int j=0; //start at beginning of str2
for(;i<len_str1;i++) //index str1
{
if(j<len_str2) //checks if we've finished searching str2
{
if(str1[i]!=str2[j])
{
goto there;
}
j++;
}
else
{
return save_str; //does not return properly. I can't figure out how to save a particular point in the index to a pointer.
}
}
}
}
}