/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema con cadenas

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
dementor3



Registrado: 14 Nov 2007
Mensajes: 5

MensajePublicado: 29/11/2007 11:05 am
Título: Problema con cadenas

Hola Amigos, tengo el siguiente dilema: en un programa en turbo c tengo que ingresar 2 cadenas y contar cuantas letras iguales tienen.


pensaba utilizar dos ciclos for usando strlen para que vaya contando la cadena y despues compararla pero quede medio colgado ojala puedieran ayudarme


gracias
_________________
The Hitman
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 377
Ubicación: Cono Sur

MensajePublicado: 29/11/2007 2:01 pm
Título:

Sería conveniente que publiques el código hasta donde hiciste así te ayudamos, porque existen varias formas de resolverlo.

Un saludo
Volver arriba
dementor3



Registrado: 14 Nov 2007
Mensajes: 5

MensajePublicado: 29/11/2007 2:19 pm
Título:

digies escribió:
Sería conveniente que publiques el código hasta donde hiciste así te ayudamos, porque existen varias formas de resolverlo.

Un saludo



#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
void main()

{
char cad1[30], cad2[30];
int i, j;
clrscr();

printf("Ingrese texto 1:");
gets(cad1);
printf("Ingrese texto 3:");
gets(cad2);

for */ hasta aqui estoy obviamente conosco el funcionamiento del ciclo for pero no se como saber las coincidencias de letras de las cadenas ojala puedas ayudarme/*
_________________
The Hitman
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3837
Ubicación: Mexico

MensajePublicado: 29/11/2007 3:55 pm
Título:

Lo mas pesado para resolver el enunciado es tomar una de esas cadenas y 1) ordenar sus caracteres, 2) eliminar los caracteres duplicados.

El siguiente paso (tercero) es relativamente facil y consiste en utilizar una funcion como strchr para conocer si un caracter forma parte de una cadena. Esto se haria en un bucle asi:
Código:
letras_iguales = 0;
for (i = 0; cadena[i] != '\0'; i++)
   if (strchr(cadena_2, cadena[i]) != NULL)
      letras_iguales++;

printf("Letras en ambas cadenas == %d\n", letras_iguales);

/* ... */


Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
dementor3



Registrado: 14 Nov 2007
Mensajes: 5

MensajePublicado: 30/11/2007 6:20 am
Título: Resp:

[quote="dementor3"]
digies escribió:
Sería conveniente que publiques el código hasta donde hiciste así te ayudamos, porque existen varias formas de resolverlo.

Un saludo



#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
void main()

{
char cad1[30], cad2[30];
int i, j;
clrscr();

printf("Ingrese texto 1:");
gets(cad1);
printf("Ingrese texto 3:");
gets(cad2);

for(i=0; i<=strlen(cad1)-1 j++)
{
for(j=0; i<=strlen(cad2)-1; j++)
if(cad1[i]==cad2[j])
k++;
}
}


ahi ta listo ayer con la ayuda de amigos y profes pude hacerlo
_________________
The Hitman
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3837
Ubicación: Mexico

MensajePublicado: 30/11/2007 8:13 am
Título:

Un problema con ese programa es el uso de gets para leer la entrada estandar, debido al uso de esa funcion el programa puede reventar (o no) dependiendo del contenido del bufer de la entrada estandar.

Otro problema es que no se maneja el caso de caracteres duplicados en una cadena como "cacao", "cacahuate", "chocolate", etc.

Un programa que evita el uso de gets y maneja correctamente los caracteres duplicados (al costo de una mayor complejidad) es (C estandar):
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LONG_MAX_CADENA  32

int cmp(void const *p, void const *q);

int main(void)
{
   char cadena[2][LONG_MAX_CADENA];
   char *nl;
   int i;
   
   /* Obtener las dos cadenas de la entrada estandar */
   for (i = 0; i < 2; i++){
      printf("Cadena no %d: ", i + 1);
      if (fgets(cadena[i], LONG_MAX_CADENA, stdin) == NULL)
         return EXIT_FAILURE;
      if ((nl = strchr(cadena[i], '\n')) != NULL)
         *nl = '\0';
   }
   
   /* Ordenar la primera cadena */
   qsort(cadena[0], strlen(cadena[0]) - 1, 1, cmp);
   
   puts("Caracteres comunes a ambas cadenas:");
   
   /* Procesar los caracteres de la primera cadena ... */
   for (i = 0; cadena[0][i] != '\0'; i++){
      /* ... ignorando los caracteres duplicados */
      if (cadena[0][i] == cadena[0][i + 1])
         continue;
     
      /* Imprimir el caracter solo si es comun a ambas cadenas */
      if (strchr(cadena[1], cadena[0][i]) != NULL)
         printf("%c\n", cadena[0][i]);
   }
   
   return EXIT_SUCCESS;
}

int cmp(void const *p, void const *q)
{
   char a = *((char *) p);
   char b = *((char *) q);
   
   return a - b;
}


Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com