1

strstr関数を最初から書き込もうとしています。デバッガーでコードを1行ずつ調べましたが、正常に機能しています。ただし、検索対象の部分文字列の先頭を適切に保存していません。そのため、正しく返送されていません。私はプログラミングの経験があまりないので、私のコードは少し厄介で複雑です。ただし、ほとんどの場合は機能します。以下に私のコードを示します(私の教授と皆さんが私が何をしたかを確認するためにコメントしました)。(また、私の教授はすでに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. 
                }
            }
        }

    }
}
4

3 に答える 3

3

あなたが書いた行

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

(たとえば)

save_str = str1 + i;   

元のバージョンでは、文字の数値がポインタとして扱われていますが、これは完全に間違っています。

于 2012-02-17T01:50:30.210 に答える
3

なぜこのような複雑なコードが必要なのですか?

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;
}
于 2012-02-17T01:58:06.157 に答える
0

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;

}
}
于 2018-02-04T00:36:02.347 に答える