Pregunta

Estoy tratando de escribir la función Strstr desde cero. Pasé por mi código Line by Line en el depurador y funciona bien. Sin embargo, no está guardando el inicio de la subcadena su búsqueda correctamente. Y, por lo tanto, no lo devuelve correctamente. No tengo mucha experiencia en programación, por lo que mi código es un poco desordenado y complicado. Sin embargo, funciona en su mayor parte. Aquí está mi código a continuación (comentado para mi profesor y para que todos vean lo que hice). (Además, mi profesor ya ha expresado su aceptación de la función 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. 
                }
            }
        }

    }
}
¿Fue útil?

Solución

La línea que has escrito como

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

debería ser (por ejemplo)

save_str = str1 + i;   

Su versión original está tratando el valor numérico del personaje como un puntero, que está completamente incorrecto.

Otros consejos

¿Por qué necesita un código tan complejo?

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

Código Java para Strstr

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;

}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top