Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: daryo en 21 Junio 2013, 21:28 pm



Título: [c]subcadenas porque no funciona?
Publicado por: daryo en 21 Junio 2013, 21:28 pm
la salida es :
5
-1
-1
alguna idea ?

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int findstr(char *cadena, char *subcadena, int pos_ini)
  5. {
  6. int i, j;
  7. for(i=pos_ini; cadena[i]!='\0'; i++)
  8. for(j=0; subcadena!='\0' && cadena[i+j]==subcadena[j]; j++)
  9. if(subcadena[j+1]=='\0')
  10. return i+1;
  11. return -1;
  12. }
  13.  
  14. int main()
  15. {
  16. char cadena[]="c a calar calar comer calar garbanzos";
  17. char subcadena[]= "cala";
  18.  
  19. printf("%i\n", findstr(cadena, subcadena, 0));
  20. strcpy(subcadena, "calar");
  21. printf("%i\n", findstr(cadena, subcadena, 0));
  22. printf("%i\n", findstr(cadena, subcadena, findstr(cadena, subcadena, 0)));
  23.  
  24. return 0;
  25. }
  26.  


Título: Re: [c]subcadenas porque no funciona?
Publicado por: kmilinh0 en 21 Junio 2013, 21:45 pm
mi salida es:
5
5
11


Título: Re: [c]subcadenas porque no funciona?
Publicado por: 0xDani en 21 Junio 2013, 21:50 pm
Código
  1. subcadena!='\0'

Qué es eso? Ni siquiera te lanza un warning?


Título: Re: [c]subcadenas porque no funciona?
Publicado por: amchacon en 21 Junio 2013, 23:14 pm
Código
  1. subcadena!='\0'

Qué es eso? Ni siquiera te lanza un warning?
Es legal, lo que hace comparar el valor del puntero char con el ASCII de '\0'.

Aunque evidentemente, no es eso lo que quería hacer. Supongo que se le ha olvidado el [j]


Título: Re: [c]subcadenas porque no funciona?
Publicado por: daryo en 21 Junio 2013, 23:31 pm
siendo sinceros es un code que me pasaron no es ni siquiera hecho por mi aun asi me parecio raro que no funcionara por cierto 0xdani es mas estricto que el mismo compilador :P


Título: Re: [c]subcadenas porque no funciona?
Publicado por: 0xDani en 22 Junio 2013, 00:17 am
Es legal, lo que hace comparar el valor del puntero char con el ASCII de '\0'.

Aunque evidentemente, no es eso lo que quería hacer. Supongo que se le ha olvidado el [j]

Claro que es legal, por eso le he preguntado si no le lanza un warning, por ejemplo de comparación entre puntero y entero.

por cierto 0xdani es mas estricto que el mismo compilador :P

Pues debe ser poco estricto el compilador xD


Título: Re: [c]subcadenas porque no funciona?
Publicado por: amchacon en 22 Junio 2013, 00:52 am
Claro que es legal, por eso le he preguntado si no le lanza un warning, por ejemplo de comparación entre puntero y entero.
No da warning porque es una comparación con 0, y esa comparación si tiene sentido (para comprobar si es un puntero válido).