質問

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

    }
}
役に立ちましたか?

解決

あなたが書いたライン

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;

}
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top