Dev - C++ - AYUDA copiar strings no repetidos en un arreglo bidimencional

 
Vista:
Imágen de perfil de leonel

AYUDA copiar strings no repetidos en un arreglo bidimencional

Publicado por leonel (6 intervenciones) el 28/09/2017 16:42:35
Mi problema es queal realizar el random,de strings de apellidos me funciona todo bien, pero a la hora de buscar los que son iguales y solo poner 1 solo sin repetir en un nuevo arreglo......no funciona
y me vuelve a copiar el random de vuelta
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<conio.h>
#include <string.h>
 
int main()
{
 
 
	int numero,i,j=0,k,z=0,n,a=0 ;
	n=50;
 
 
char A[50][50]= {"Perez","Peña","Maldonado","Tayagui","Gonzales","Pisacic","Garcia","Sanchez","Lopez","Martines","Alvarez","Gomez","Moreno","Blanco","Luiz","Hernandes","Romero","Fernandes","Alonso","Vazques","Diaz","Gallego","Zapata","Jaramillo","Mimi","Molina","Gordon","Zalegas","Estrada","Puerta","Paladines","Vargas","Lisboa","castillo","cruz","Duarte","Fiol","Wilson","davis","Smith","THOMPSON","Lago","Madrid","Miralles","Montenegro","Bonora","Olmedo","Ponce","Quirós","Saavedra"};
	char B[50][50];
	char C[50][50];
 
 
	srand(time(NULL));
 
		printf("**** Apellidos Originales Aleatorios\n\n");
 
		for (i=1;i<=n;i++)	{
 
		numero= 1 + rand() % ((n+1)-1);       //genera el random de apellidos
 
		strcpy(C[a],A[numero]);            //copia cada random al arreglo C
 
		a++;
 
		printf("%s\n",A[numero]);
 
	}
printf("\n\n");
 
printf("*** El arreglo sin apellidos repetidos son! \n\n");
 
for (z=0;z<50;z++){                 //bucle del primmer elemento
	a=0;
	for(k=z++;k<50;k++){             //bucle para comparar el 1er elemento con todos los demas
 
		if(C[z]==C[k]){               //condicional que pregunta si son iguales (que al parecer no funciona)
 
			while(a!=1){                  // si se repite mas de dos veces, no se copia al arreglo B
 
			strcpy(B[z],C[z]);         //copia de C a B
			printf("%s\n",B[z]);         //muestra por pantalla
 
		    a++;
			}
 
		}
	}
 
 
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Dionicio
Val: 168
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

re:AYUDA copiar strings no repetidos en un arreglo bidimencional

Publicado por Dionicio (57 intervenciones) el 28/09/2017 22:46:55
1
if(C[z]==C[k])  //condicional que pregunta si son iguales (que al parecer no funciona)

Mi hipótesis a simple vista es que estás tratando de comparar matrices o arreglos de cadenas lo cual no es permitido en C. Es como tratar de comparar "hola" == "hola", en lenguajes de alto nivel es posible pero en C no se puede.

En cambio puedes usar la función strcmp(); que te proporciona C para comparar cadenas, la cual devuelve 0 si son iguales, y cualquier otro numero sino lo es. Prueba cambiando la condición de la siguiente manera:

1
if(strcmp(C[z],C[k]) == 0)

Si quieres comparar sin importar mayúsculas o minúsculas usa strcasecmp();


Puede darse el caso que tu código necesite más cambios, pero por ahora es en todo lo que puedo ayudar. Espero te sirva de algo, si necesitas seguir preguntando no dudes en hacerlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de leonel

re:AYUDA copiar strings no repetidos en un arreglo bidimencional

Publicado por leonel (6 intervenciones) el 29/09/2017 00:33:55
Muchas Gracias Amigo por comentar!
ya he copilado pero al parecer sigo teniendo el mismo problema,sigue habiendo apellidos repetidos
al parecer el strcmp cumple la misma función que el if que ya había puesto
desde ya muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de leonel

re:AYUDA copiar strings no repetidos en un arreglo bidimencional

Publicado por leonel (6 intervenciones) el 29/09/2017 00:54:51
Me sale Como Alternados los apellidos si te das cuenta,a la hra de copiarlos en plan, 1ero si,2do no,3ero si.....etc
ima
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dionicio
Val: 168
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

re:AYUDA copiar strings no repetidos en un arreglo bidimencional

Publicado por Dionicio (57 intervenciones) el 29/09/2017 04:29:06
Disculpa si no fui muy claro más arriba. Por cuestiones de trabajo no puedo darme el lujo de comentar como se debe.

Ahora que llegué de la universidad pude darme el tiempo de estudiar tu código y corregirlo un poco. Te lo dejaré debajo para que le eches un ojo y puedas probarlo. Sino entiendes o no queda claro algo puedes preguntar nuevamente.

Espero te sea de ayuda. Un saludo Leonel :D.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de leonel

re:AYUDA copiar strings no repetidos en un arreglo bidimencional

Publicado por leonel (6 intervenciones) el 29/09/2017 06:57:36
Soy un Chico Principiante que esta estudiando este lenguaje de Programación de forma Autodidacta, ya que realmente me gusta este mundillo (y en 1er año de ing en siste, solo vemos pseudocódigo)
y es fascinante encontrar personas como tu en foros, que siempre ayudan donando su tiempo :D y explican (hasta incluso dan consejos) sobre códigos

se lo agradece bastante ! y seguiré practicando!
un Saludo y que tenga Un Buen Dia Dionicio ! :D


pd: ese condicional del final solo sera verdadero cuando el strcpy sea falso? es decir de 1?
1
2
3
if(estaRepetido == 0){
	printf("%s\n",apellidosSeleccionados[z]);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dionicio
Val: 168
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

re:AYUDA copiar strings no repetidos en un arreglo bidimencional

Publicado por Dionicio (57 intervenciones) el 29/09/2017 12:56:47
çTe entiendo perfectamente, al igual que tú en la universidad no me han ensañado casi nada (y eso que casi termino), lo que he aprendido ha sido de forma autodidacta. Te agradezco tus palabras, por personas como tú me animo a ayudar.

1
2
3
if(estaRepetido == 0){
	printf("%s\n",apellidosSeleccionados[z]);
}

Esa condicional sirve de comprobación y te dice si en el bucle while (donde comparamos los apellidos) se repitió un apellido. Si te das cuenta si hay un apellido repetido la variable "estaRepetido" toma el valor donde se encuentra ese apellido repetido (es decir la variable "k").

Adentro de la condicional, solo se imprime el apellido si no está repetido, pero podrías haber copiado en otro lugar ese apellido, pero sería
poco eficiente dado que no usas esos apellido en otra parte.

Por eso luego de esa condición "estaRepetido" vuelve a ser 0 porque analizaremos un nuevo apellido.

Aveces resulta útil depurar código, y si usas un IDE como Dev-C++ que incluyen un depurador te será fácil. Esto te facilita a la hora de ver que pasa en el código en tiempo de ejecución y paso por paso. Te recomiendo que veas un vídeo de como depurar codigo y así vez como funciona todo.

Sigue como vas, y verás pronto resultados gratificantes! :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de leonel

re:AYUDA copiar strings no repetidos en un arreglo bidimencional

Publicado por leonel (6 intervenciones) el 29/09/2017 20:40:05
perfecto ya he entendido !

por cierto, esta es mi ultima duda y ya te dejo tranquilo......y a la hora de poder contar cuantas veces se repitió....tendría que quitar el break (para que analice todo), poner un contador, y como seria que para cuando el "z" llegue de nuevo al mismo apellido( que se lo había contado ya en el "z" anterior) no lo cuente de vuelta?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dionicio
Val: 168
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

re:AYUDA copiar strings no repetidos en un arreglo bidimencional

Publicado por Dionicio (57 intervenciones) el 01/10/2017 17:09:00
Disculpa amigo que no había respondido antes, pero no tenía tiempo...

Bueno sigamos! Se podría hacer como dices pero que pasa, sería muchas cosas en un solo lugar, es decir, tener que contar los repetidos y a su vez tener que saber si se repitió. Lo que yo recomiendo es hacerlo a parte, así el código sería más legible y resultaría más fácil entender.

Yo lo haría almacenando los apellidos sin repetir en un arreglo y luego ir comparando con el vector de apellidos repetidos que se genera aleatoriamente. El proceso sería similar al proceso de detectar si está repetido.

Aquí te dejaré tu código con dicha modificación para que le eches un ojo, y ya sabes que sino entiendes algo puedes seguir preguntando, y en cuanto pueda te ayudo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de leonel

re:AYUDA copiar strings no repetidos en un arreglo bidimencional

Publicado por leonel (6 intervenciones) el 01/10/2017 21:42:22
Tienes Razón.....de esa forma es mucho mas eficiente,ya me estaba comiendo la cabeza de como recorrer todo sin que se repita el próximo jajaj ,por alguna razón, no se me ocurrio jajaj
Muchas Gracias !
Saludos y ten un Buen Domingo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar