PDA

Ver la versión completa : programando en c



serlioner
27/12/2011, 18:28
hola, como no sabía donde ponerlo lo pongo aquí:
tengo que hacer un programa en c que detecte si 2 palabras son anagramas, yo he hecho este código
int cad(char *a,char *b)
{
int i,j;
int resultado=0;
int contador=0;
for (i=0;a[i]!='\0'; i++)
{
for(j=0;b[j]!='\0'; j++)
{
if (a[i]==b[j])
{
contador=contador+1;
}
}
}
if (strlen(a)==contador)
{
return 1;
}
else{
return 0;
}
}
pero me falla, alguien sabe que puede ser?
gracias por adelantado.

swapd0
27/12/2011, 18:55
En el segundo bucle, en el if si se encuentra dos caracteres iguales sigue buscando y eso puede dar falsos positivos.

De todas formas se mas especifico diciendo en que falla y usas las etiquetas para el codigo.

serlioner
27/12/2011, 19:15
yo intento que coja un caracter de la primera cadena y la busque en la otra, si lo encuentra que aumente un contando, si cuando acaba la primera cadena el contador es igual a la longitud de la cadena significará que tienen las mismas letras y entonces devuelve el valor 1 en señal de que son anagramas, pero al probar con argentino y ignorante por ejemplo me devuelve el valor 0.

juanvvc
27/12/2011, 19:27
Eso es porque "argentino" no es del todo un anagrama de "ignorante": date cuenta que ignorante tiene dos letras 'n', así que al final de los bucles contador tendrá un número más alto que strlen(a).

Dos opciones:

1.- que tu función solo detecte anagramas perfectos. "argentino" e "ignorante" no son anagramas perfectos, así que está correcto que tu función diga que no lo son.
2.- si quieres detectar este tipo de anagramas "imperfectos", donde no importa que las letras se repitan o no, entonces puedes poner un "break" después de aumentar el contador, como dice swap0

Por cierto, utiliza la etiqueta [code] o es dificilísimo seguirte el código.

swapd0
27/12/2011, 20:07
Yo lo primero que haria es comprobar si las dos cadenas tienen la misma longitud, si no son iguales puedes salir y ahorrarte las comparaciones.

Jurk
27/12/2011, 20:48
yo lo que haria, seria coger una cadena, copiarla incvertida en otro vector de chars, y arrearle un strcmp

swapd0
27/12/2011, 21:03
yo lo que haria, seria coger una cadena, copiarla incvertida en otro vector de chars, y arrearle un strcmp

Eso no vale, un anagrama es dada una palabra formar otra variando el orden (cualquier orden) y con las mismas letras.

Jurk
27/12/2011, 21:11
Eso no vale, un anagrama es dada una palabra formar otra variando el orden (cualquier orden) y con las mismas letras.

vaya, me confundi con capicua... XD:lol::motora:

Que eso pa mi es una palabra con las mismas letras en otro orden, coñe