[C con Clase] Punteros a cadenas

Luis Pedro Méndez elinv.elinv en gmail.com
Jue Oct 20 23:33:38 CEST 2011


Hola a todos queridos amigos!, saludos y e especial a David pues sigo de
cerca su compromiso y su vocación por ayudar. Así que felicitaciones!

Bueno aquí les dejo un código que he desarrollado a partir de la idea del
estudiante que sirve para hallar palabra, o palabras contando los espacios
antes, durante o después de la misma, con lo cual si lo que buscamos tiene
un espacio al final o al principio y la frase en la que se busca no lo
tiene, el resultado sera falso.

Realmente verán que es un algoritmo básico y lo he explicado suficientemente
para un mejor entendimiento del estudiante....
-----------------------------------------------------------------------------------
//indicar si una subcadena se encuentra en una cadena
#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;

bool buscasubcadena(char a[100],char b[100]);

int main()
{
    char cad[100], subcad[100];
    cout<<"Ingrese la cadena: ";
    gets(cad);
    cout<<"Ingrese la subcadena: ";
    gets(subcad);

    if(buscasubcadena(cad,subcad))
    {
        cout<<"La cadena: "<<endl;
        cout<<cad;
        cout<<endl;
        cout<<"contiene a la subcadena: "<<endl;
        cout<<subcad;
    }
    return 0;
}

//Este algoritmo hallara palabra o palabras separadas por espacio o
//palabras con espacios al principio o al final.
bool buscasubcadena(char *a,char *b)
{
    //Variables para obtener el tamaño de los string
    int n,m;
    //Obtenemos la dimensión de los mismos
    n=strlen(a);
    m=strlen(b);
    //Variable boolean para determinar si lo hallamos.
    bool hallado;
    //Bucle que recorrera la palabra en la que se busca
    for (int x=0; x < n; x++)
    {
        //Bucle que recorre la palabra buscada
        for (int y= 0; y < m; y++)
        {
            //Si hallamos una primera coincidencia de letras
            //de ambas matrices de string en sendos punteros
            if (a[x]==b[y])
            {
                //En un nuevo bucle recorremos de allí hasta adelante
                //para verificar la integridad de la coincidencia con las
                //demás letras de la palabra buscada
                for(int z= 0; z < m; z++)
                {
                    //Si no hallamos coincidencia en las subsiguientes
letras
                    if(a[x+z]!=b[z])
                    {
                        //Salimos del for previo declarar hallado a false
                        //para que no se confunda una letra hallada con la
                        //frase que intentamos hallar
                        hallado=false;
                        break;
                    }
                    else
                    {
                        //Caso contrario declaramos como hallado ese
caracter coincidente
                        //y seguimos cotejando los demás.
                        hallado=true;
                    }
                }
                //Si llegamos a este punto, retornamos verdadero, pues
                //hallado esta a true
                if (hallado) return true;
            }
        }
    }
    //Si llegamos a este punto el texto no fué hallado.
    return false;
}
-----------------------------------------------------------------------------------
Probado en Code::Block 10.05, a mi entender un IDE sencillamente
espectacular.

Atentamente les saludo fraternalmente y que Dios les bendiga!

Elinv.

http://www.bragadomas.com/
http://todocporelinv.blogspot.com/





El 20 de octubre de 2011 18:19, Jose Luis <jcmdustin en gmail.com> escribió:

> gracias por tu ayuda david, pero quisiera saber como aser una funcion q
> trabaje de manera similar quiza... es q me lo pidieron en clase ^^
>
> El pasado 2011-10-20 20:25:30, David escribió:
>
> D> Buenas jose luis, por suerte nuestro querido C tiene una funcion que
> D> retorna justamente lo que tu quieres. Se llama strstr y este es su
> D> prototipo: const char * strstr ( const char * str1, const char * str2
> D> );
> D> Los valores de retorno son:
> D> NULL si no se encuentra la cadena str2 en la cadena str1
> D> Un puntero a la primera ocurrencia de la cadena str2 en la cadena str1.
> : http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20111020/5d9850e9/attachment.html>


Más información sobre la lista de distribución Cconclase