SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: crocop en Domingo 26 de Octubre de 2008, 05:06

Título: intercalar cadenas
Publicado por: crocop en Domingo 26 de Octubre de 2008, 05:06
hola tengo un problema con este programa ; el programa intercala cadenas por ejemplo:
cadena1=ola , cadena2=chao , cadena3=oclhaao .el  problema es cuando las cadenas no que  tienen el mismo numero de caracteres, el problema esta  cuando la primera cadena es menor en numero de caracteres que la segunda cadena. solo me devuelve el valor hasta su ultimo valor
por ejemplo: cadena1= a , cadena2=bye , cadena3= ab

no asi cuando es mayor la primera que la segunda ejemplo:
cadena1= bye , cadena2=a , cadena3= baye

aqui esta el programa, agradesco aportes  :good:

Código: Text
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<string.h>
  4. #include<ctype.h>
  5. void llenar_cadena(char cadena[80]);
  6. void mostrar_cadena(char cadena1[80],char cadena2[80],char cadena3[80]);
  7. void main ()
  8. {
  9. char c[80]={0},s[80]={0},f[80]={0};
  10.  
  11. clrscr();
  12. llenar_cadena(c);
  13. llenar_cadena(s);
  14. mostrar_cadena(c,s,f);
  15. getch();
  16. }
  17. void llenar_cadena(char cadena[80])
  18. {
  19. puts("ingrese cadena");
  20. gets(cadena);
  21. }
  22. void mostrar_cadena(char cadena1[80],char cadena2[80],char cadena3[80])
  23. {
  24. int i=0,j,n,subs=1,subc=0;
  25. while(i<=(strlen(cadena1)+strlen(cadena2))){
  26. //cadena2[subc]=cadena[i];
  27. if(cadena1[i]==''){
  28. while(i<=strlen(cadena2)){
  29. cadena3[subs]=cadena2[i];
  30. subs++;
  31. i++; }
  32. printf("la intercalacion es %sn",cadena3);
  33. break;}
  34. cadena3[subc]=cadena1[i];
  35. //cadena2[subs]=cadena1[i];
  36. if(cadena2[i]==''){
  37. while(i<=strlen(cadena1)){
  38. cadena3[subc]=cadena1[i];
  39. subc++;
  40. i++; }
  41. printf("la intercalacion es %sn",cadena3);
  42. break;}
  43. cadena3[subs]=cadena2[i];
  44. subc+=2;
  45. subs+=2;
  46. i+=1;
  47. }
  48. }
  49.  
Título: Re: intercalar cadenas
Publicado por: EL_UNI en Martes 28 de Octubre de 2008, 13:32
Bueno tengo una pequeña implementación que soluciona tu problema. No entendí muy bien tu código pero supongo que lo que quieres es intercalar dos cadenas y una vez que una de las dos cadenas llegue a su fin, se rellene con lo que queda de la otra. Si es así tengo aquí el código:

Código: C
  1.  
  2. while((cad1[i]!='')&&(cad2[i]!='')){
  3.         cad3[j++]=cad1[i];
  4.         cad3[j++]=cad2[i++];
  5.     }
  6.    
  7.     if(cad1[i]!=''){
  8.         while(cad1[i]!=''){
  9.             cad3[j++] = cad1[i++];
  10.         }
  11.         cad3[j]='';
  12.     }else{
  13.         while(cad2[i]!=''){
  14.             cad3[j++] = cad2[i++];
  15.         }
  16.         cad3[j]='';
  17.     }
  18.    
  19.     printf("La cadena resultante es: %s",cad3);
  20.  
  21.  

Lo va rellenando intercalando los caracteres de una y otra cadena. Luego comprueba si NO ha salido del bucle por causa de la primera cadena y rellena con lo que queda en ella, si es asi es que ha salido por la otra cadena y la rellena con los otros caracteres. Luego muy importante indicar el fin de cadena.
Espero que te haya ayudado.

Un saludo, EL_UNI