[aporte][c]encontrar subcadenas y su posicion

Iniciado por daryo, 16 Junio 2013, 01:54 AM

0 Miembros y 1 Visitante están viendo este tema.

daryo

#include <stdio.h>
#include <string.h>

int main()
{
char cadena[]="a p**a";
char groseria[]="p**a";
int value;
int val;
int x=0;
for(value=0;cadena[value]!='\0';value++)
{
    if(cadena[value]==groseria[0])
    {
       for(val=0;cadena[value+val]!='\0';val++)
       {
        if(cadena[value+val]==groseria[val])
        {
                x++;

        }
        else
        {
            x=0;
        }
            if(x==strlen(groseria))
        {
            printf(" el detector de groserias a encontrado una coincidencia en la posicion %i \n",value);
        }
       }
    }

}
return 0;
}
buenas

amchacon

;-) ;-)

Deberías ampliar el programa para una lisa de palabras ^^

Por cierto una implementación en C++:

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

const char Palabras_Malsonantes = 4;

int main()
{
   string Nombre = "Casa de p***a";
   int indice;

   const char Palabras[30][20] = {
                               {"p***a"},
                               {"cab**n"},
                               {"idiota"},
                               {"lameculos"}
                             };

   for (int i = 0; i < Palabras_Malsonantes;i++)
   {
       if ((indice = Nombre.find(Palabras[i])) != -1)
           cout<<"Se encontro una palabra malsonante en la posicion "<<indice<<endl;
   }

   return 0;
}

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

aguml

¿Y por que no usar lo que ya existe como es strstr de string.h? Le indicas la cadena y la subcadena a buscar y te devuelve la posicion de esta si la encuentra, y si la encuentra pues vuelves a usarla pero esta vez empiezas a buscar desde el resultado obtenido mas 1 y asi hasta llegar al final de la cadena.

daryo

Cita de: aguml en 16 Junio 2013, 11:43 AM
¿Y por que no usar lo que ya existe como es strstr de string.h? Le indicas la cadena y la subcadena a buscar y te devuelve la posicion de esta si la encuentra, y si la encuentra pues vuelves a usarla pero esta vez empiezas a buscar desde el resultado obtenido mas 1 y asi hasta llegar al final de la cadena.
pues la verdad no me gusta como c maneja las cadenas a diferencia de c++ asi que me parece mejor codearmelas.Ademas algo aprendere  :P


Cita de: amchacon en 16 Junio 2013, 10:52 AM
;-) ;-)

Deberías ampliar el programa para una lisa de palabras ^^

Por cierto una implementación en C++:

me gusta tu version en  c++ ;D
buenas

leosansan

#4
Ya que no usamos strstr, ¿para qué hacer uso de la librería string?. Ya puestos lo hacemos todo "a pelo":

Código (cpp) [Seleccionar]
#include <stdio.h>
int main(void)
{
   char cadena[60]="hola no es ni aholal hola sino hola ni halo y si holahola",
   cadena1[]="hola";
   int i,j,cont=0,num2=0;
   for (i=0;cadena1[i];i++)
       num2++;
   for (i=0 ; cadena[i];i++)
       if (cadena[i]==cadena1[0] &&  cadena[i-1]==' ' || i==0 )
           {
               for (j=1;j<=num2-1 ;j++)
                   {
                       if (cadena[i+j]!=cadena1[j]) break;
                       if (j == num2-1 && cadena[i+num2]==' ')
                       {
                           cont++;
                           printf ("\nEncontrada la palabra \"%s\" en la posicion %d",cadena1,i+1);
                       }
                   }
           }
   printf ("\nEncontradas %d coincidencias.",cont);
   return 0;
}


    Saluditos!