Bueno este code salió intentando ayudar a the swash en una cosilla, creditos a the swash

Nota: Para aplicar la función en un archivo binario necesitas pasar las variables

Código: Seleccionar todo

  int iCadena=strlen(cadena);
  int iNecesitada=strlen(necesitada);
Como parámetro en la función

Código: Seleccionar todo

int instr(char *cadena,char *necesitada,int iCadena,int iNecesitada)

Código: Seleccionar todo

/**********************
* Instr o Strpos      *
* Coder: Linkgl       *
* Greatz: The Swash   *
**********************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//prototipo
int instr(char *cadena,char *necesitada);

//uso
int main()
{
  int x=instr("linkholalink","hola");
  printf("%d",x);
  return 0;
}

//funcion
int instr(char *cadena,char *necesitada)
{
  int iCadena=strlen(cadena);
  int iNecesitada=strlen(necesitada);
  int i;
  char *temp=(char *)malloc(iNecesitada);
  for(i=0;i<iCadena*iNecesitada;i++)
  {
    memcpy(temp,cadena+i,iNecesitada);
    if(strcmp((char *)necesitada,(char *)temp)==0)
      return i+1;
  }
  return -1;
}
//mHmm..
muy bueno, pero el instr de VB tiene un parametro start que es donde se comienza a buscar la cadena, asi puedes usar ese parametro como contador y ya no declararla, y si no encuentra la cadena a buscar dentro de la primera cadena entonces retorna el start del inicio, un saludo!
Agradezco tu ayuda, pero al final te dije que ya sabia como hacerlo:

Código: Seleccionar todo

/*  @autor : The Swash
    @EOF Writer
    @purpose: Find string in other string
*/
int Pos(char * str, int lenstr, char * substr, int lensubstr)
{
    int i=0;
    for (i = 0; i < lenstr ; i++)
    {
        if (memcmp(str + i, substr,lensubstr)==0)
        {
            return i;
        }
    }
    return 0;
PD: strcmp ignora caracteres nulos amigo, por eso use memcmp.

Saludos.
En tu ventana
Y en tu ventana, gritas al cielo pero lo dices callada..
The Swash escribió:Agradezco tu ayuda, pero al final te dije que ya sabia como hacerlo:

Código: Seleccionar todo

/*  @autor : The Swash
    @EOF Writer
    @purpose: Find string in other string
*/
int Pos(char * str, int lenstr, char * substr, int lensubstr)
{
    int i=0;
    for (i = 0; i < lenstr ; i++)
    {
        if (memcmp(str + i, substr,lensubstr)==0)
        {
            return i;
        }
    }
    return 0;
PD: strcmp ignora caracteres nulos amigo, por eso use memcmp.

Saludos.
No sabía que strcmp ignoraba los carácteres nulos, xD entonces para leer un binario necesitaría reemplazarlo por memcmp, pero para cadenas normales funciona bien, si se que dijiste que ya tenías una idea planteada pero no está demás compartir esta función también
K-0Z escribió:muy bueno, pero el instr de VB tiene un parametro start que es donde se comienza a buscar la cadena, asi puedes usar ese parametro como contador y ya no declararla, y si no encuentra la cadena a buscar dentro de la primera cadena entonces retorna el start del inicio, un saludo!
Eso se cambia nomas tocando el contador...

..
for(i=tuposicion;....
..
return i

En mi caso para las cadenas que yo edito prefiero que me retorne -1 para saber que no se encontró la palabra pero ya dependerá de las necesidades de cada quien editarla para que quede a su manera ;)
//mHmm..
Agradezco que ayas tratado de ayudarme, siempre lo has hecho =)
Pero tu sabes como soy de terco, me gusta hacer las cosas o morir en el intento!

Saludos amigo!
En tu ventana
Y en tu ventana, gritas al cielo pero lo dices callada..
Responder

Volver a “Fuentes”