[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