[C con Clase] Ayuda comparaciones de cadenas

Steven Davidson steven en conclase.net
Vie Jul 6 16:37:19 CEST 2007


Hola Isauro,

El pasado 2007-07-05 06:23:01, isauro escribió:

i> Hola a todos los compañeros de la lista.
i> mi problema es el siguiente:
i> deseo capturar una cadena de caracteres y compararla, para asi saver si hay alguna palabra de las que ya tengo almacenadas en otra cadena.
i> lo que estoy haciendo es:
i> char acepta[100]={'\0'};      declaro un arreglo de caracteres
i> cin >> acepta                            almaceno lo que se escribe en la cadena
i>                    mi primer problema es que si se introduce un espacio, se almacena pero hasta el espacio

Esto es el comportamiento normal de 'cin >>'. Lo que deberías hacer es usar la función miembro 'getline()'. Por ejemplo,

cin.getline( acepta, 100 );

i> ahora, yo ya tengo una palabra      char compara[]="hola";
i> y lo que quiero hacer es saver si esta palabra existe en la cadena introducida
i> lo que estoy haciendo esta bien, o hay otras funciones que me ayuden con esto
i> ya que yo lo comparo posicion por posicion con ayuda de los for, pero tomo en cuenta que son varias palabras que deseo buscar en la cadena capturada
i>  

Podrías hacer tu propia función, pero creo que es más útil y sencillo usar una estándar. Sugiero usar la función estándar 'strstr()' declarada en <cstring>. Por ejemplo,


char *ptr = strstr( acepta, compara );

if( !ptr )
  cout << "No se encontró \"" << compara << "\" en \"" << acepta << "\"\n";
else
  cout << "Se encontró \"" << compara << "\" en \"" << acepta << "\"\n"
          "a partir del índice " << (ptr-compara) << endl;


Espero que esto te ayude.

Steven


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