Concatenar cadenas

Iniciado por caronte80, 31 Agosto 2012, 22:04 PM

0 Miembros y 1 Visitante están viendo este tema.

caronte80


 Hola a todos

Le estoy dando vueltas a un codigo en C  que quiero que escriba combos en un archivo con este formato:   aaaaaa:aaaaaa
               aaaaab:aaaaab.....

pero en realidad la salida es esta:  aaaaaa:aaaaaa
                                                  aaaaab:aaaaaa
                                                  aaaaac:aaaaaa......

    ALguien podria ojear el codigo y darme alguna sugerencia...???
 Gracias de antemano.

/*DICCIONARIO*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int desde;
int hasta;



void calcula (void);


int main()
{
int ndopcion;

printf("\n\n\t\t\t\tMENU\n\n");
printf("\n\t\t1\tNumeroS\n\t\t2\tMayusculaS\n\t\t3\tMinusculaS\n\t\t4\tVaciO\n\t\t5\tVaciO\n");
printf ("\nIntroduza numero de opcion: ");
scanf (" %d" ,&ndopcion);
while(getchar()!='\n');

switch (ndopcion)
{
case 1:
{
desde=48;
hasta=57;
calcula();
}
break;

case 2:
{
desde=65;
hasta=90;
calcula();

}
break;

case 3:
{
desde=97;
hasta=122;
calcula();

}
break;

case 4:
{

}
break;

case 5:
{

}
break;
}

}

void calcula (void)
{

int a, b, c, d, e, f;
char clv[14];
char combo[7];

char nombre[20];



printf("\nIntroduzca nombre del archivo de salida: ");
gets(nombre);
while(getchar()!='\n');

FILE *hoja1;
hoja1 = fopen (nombre , "wt");
if (hoja1 == NULL)
{
printf ("No se ha podido crear el fichero");
}
else

{


for (a=desde; a<= hasta; a++)
{

clv[0] = a;
combo[0]=a;
for (b=desde; b <= hasta; b++)
{
clv[1] = b;
combo[1]=b;
for (c=desde; c<= hasta; c++)
    {
clv[2] = c;
combo[2]=c;
for (d=desde; d<= hasta; d++)
{
clv[3] = d;
combo[3]=d;
for (e=desde; e<=hasta; e++)
{
clv[4] = e;
combo[4]=e;

for (f=desde; f<= hasta; f++)
{
clv[5] = f;
combo[5]=f;
clv[6]=':';
combo[6]='\n';
 
strcat(clv, combo);


fwrite (clv, sizeof(clv), 1, hoja1);
printf("\n%s",clv);
}
     }
  }
}
}
}
}
fclose(hoja1);
printf("\n%s", clv);
printf("\nArchivo cerrado\n\n ");


}

P.D: Notese que soy un poco novato.. :rolleyes:

avesudra

Una cosa ,antes que nada bienvenido y en cuanto al problema eso te va a ocupar muchísimo tiempo en hacerlo y muchísimo espacio. De todas maneras ahora lo miro y me puedes responder unas cuantas preguntas , desde donde a donde tiene que ir el diccionario , como tiene que ir , en fín. que tiene¿ que ir hasta el aaaaaa:aaaaaa hasta el ZZZZZZ:ZZZZZZ ?
Regístrate en

xiruko

#2
hola, me he mirado tu codigo por encima y la verdad creo que andas un poco liado... normal si estas empezando claro.

te aconsejo que te mires este tema bastante completo donde varios usuarios y yo escribimos distintas maneras de hacer un generador de diccionarios.

http://foro.elhacker.net/programacion_cc/como_hacer_un_generador-t366597.0.html;msg1765314#msg1765314

asi que solo te haria falta mirarte eso, y luego usar la funcion strncat (mejor esta que strcat, ya que con esta ultima no puedes limitar el numero de caracteres a añadir a la otra cadena y te puede dar problemas por gestion de memoria).

http://c.conclase.net/librerias/?ansifun=strncat

no se si conoceras esta pagina, pero por si acaso acuerdate de ella, ya que es muy util para mirar toda clase de funciones de librerias estandar, con explicacion y ejemplos.

un saludo!

edito: modifico para recalcar lo que ha dicho avesudra en cuanto al tamaño del fichero. fijate que en el tema que te he pasado, ahi intentabamos hacer las combinaciones desde AAAAAAAA hasta ZZZZZZZZ. y creo recordar que solo intentando hacerla de 7 caracteres, acabe interrumpiendo el codigo ya que llevaba una media hora y unos 32GB de tamaño.

caronte80

#3
Cita de: avesudra en 31 Agosto 2012, 22:10 PM
Una cosa ,antes que nada bienvenido y en cuanto al problema eso te va a ocupar muchísimo tiempo en hacerlo y muchísimo espacio. De todas maneras ahora lo miro y me puedes responder unas cuantas preguntas , desde donde a donde tiene que ir el diccionario , como tiene que ir , en fín. que tiene¿ que ir hasta el aaaaaa:aaaaaa hasta el ZZZZZZ:ZZZZZZ ?

 EL tiempo y el espaco no son problema avesudra.Me lo tomo como un ejercicio para adquirir soltura con el lenguaje.

El dicionario, en origen creaba archivos de palabras de 8 digitos  a elegir en minusculas mayuscula o numeros, y lo hacia con los FOR y la variable clv[]. Funcionaba.

Lo he modificado para que la salidsa sea en forma de combo: aaaaaa:aaaaaa, pero con solo 6 digitos. añadiendo ":" en medio y "\n" al final para que en el archivo aparezca un combo por linea.

Todo funciona asi,de no ser porque los 6 digitos a continuacion de ":" no cambian nunca cuando a mi entender deberian. Asi aparece en el archivo de txt:


aaaaaa:aaaaaa
aaaaab:aaaaaa
aaaaac:aaaaaa
aaaaad:aaaaaa
aaaaae:aaaaaa
aaaaaf:aaaaaa
aaaaag:aaaaaa
aaaaah:aaaaaa
aaaaai:aaaaaa
aaaaaj:aaaaaa
aaaaak:aaaaaa
aaaaal:aaaaaa
aaaaam:aaaaaa
aaaaan:aaaaaa
aaaaao:aaaaaa
aaaaap:aaaaaa
aaaaaq:aaaaaa
aaaaar:aaaaaa
aaaaas:aaaaaa
aaaaat:aaaaaa
aaaaau:aaaaaa
aaaaav:aaaaaa
aaaaaw:aaaaaa
aaaaax:aaaaaa
aaaaay:aaaaaa
aaaaaz:aaaaaa
aaaaba:aaaaaa
aaaabb:aaaaaa
aaaabc:aaaaaa
   

Y si, la idea es que termine en: zzzzzz:zzzzzz  pero en minusculas, si te fijas en el codigo solo usa las minusculas..

avesudra

Mmmm vale , de todas maneras mira lo que te ha dicho xiruko que te ayudará , el código es muy complicado de entender :/ (como no lo he hecho yo y no está bien comentado...) un consejo para esto es que pongas nombres descriptivos a las variables, no importa que sean largos... En cuanto a lo de realizar el combo repite dos veces el algoritmo y une las cadenas resultantes.
Regístrate en