Implement strstr

Implement strstr

本文关键字:strstr Implement      更新时间:2023-10-16

我正在尝试从头开始编写strstr函数。我在调试器中逐行检查了我的代码,它运行得很好。但是,它没有正确保存搜索的子字符串的开头。因此,它没有适当地归还它。我没有太多编程经验,所以我的代码有点混乱和复杂。然而,它在大多数情况下确实有效。下面是我的代码(为我的教授和大家评论,看看我做了什么)。(此外,我的教授已经表示接受后藤函数)

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. 
                }
            }
        }
    }
}

您编写为的行

save_str=(char*)str1[i];    //This is where the problem is. 

应该是(例如)

save_str = str1 + i;   

您的原始版本将字符的数值视为指针,这是完全错误的。

为什么需要如此复杂的代码?

const char *strgcstr(const char *haystack, const char *needle)        
{
 while(*haystack!=0)
 {
   if( (*haystack == *needle) &&
       (strncmp(haystack, needle, strlen(needle)) == 0) )
   return haystack;
  haystack++;
 }
 return NULL;
}
strstr的Java代码
class Solution {
public int strStr(String haystack, String needle) {
    String res ="";
    int pos = 0;
    if(needle.length() == 0){
        return 0;
    }
    if(haystack.equals(needle)){
        return 0;
    }
    if (needle.length()>haystack.length()||haystack.length() == 0){
        return -1;
    }
    for(int i =0; i<haystack.length();i++){
            if(haystack.charAt(i) == needle.charAt(0)){
                if(i+needle.length() <= haystack.length()){
                res = haystack.substring(i,i+(needle.length()));
                if (res.equals(needle)){
                pos = i;
                return pos;
                }
        }
                else{
                    return -1;
                }
            }
            else{
                continue;
            }
        }
        return -1;
}
}