Foros del Web » Programación para mayores de 30 ;) » C/C++ »

concatenar varias cadenas

Estas en el tema de concatenar varias cadenas en el foro de C/C++ en Foros del Web. Hola, tengo un subprograma que concatena 3 cadenas , y devuelve la longitud total al programa principal, pero me da el siguiente error: concatenar_cadenas.c:26: error: ...
  #1 (permalink)  
Antiguo 09/07/2010, 12:05
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
concatenar varias cadenas

Hola, tengo un subprograma que concatena 3 cadenas , y devuelve la longitud total al programa principal, pero me da el siguiente error: concatenar_cadenas.c:26: error: el objeto ‘longitud_cad’ llamado no es una función
concatenar_cadenas.c:26: error: el objeto ‘longitud_cad’ llamado no es una función
concatenar_cadenas.c:26: error: el objeto ‘longitud_cad’ llamado no es una función

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(){
  6.          char cad1[100], cad2[100], cad3[100];
  7.          int long_total;
  8.          int concatenar(char[], char[], char[]);
  9.  
  10.          printf("Introduce una cadena: ");
  11.          scanf("%99s", cad1);
  12.          printf("Introduce una cadena: ");
  13.          scanf("%99s", cad2);
  14.          printf("Introduce una cadena: ");
  15.          scanf("%99s", cad2);
  16.  
  17.          long_total=concatenar(cad1, cad2, cad3);
  18.          printf("La concatenación tiene un total de %d caracteres.\n", long_total);
  19. }
  20. int concatenar(char cad1[], char cad2[], char cad3[]){
  21.          int tamano;
  22.          int i, j;
  23.          int error = 1;
  24.          int longitud_cad;
  25.  
  26.          tamano=longitud_cad(cad1) + longitud_cad(cad2) + longitud_cad(cad3);
  27.  
  28.          if(tamano > sizeof(cad3)){
  29.              error=0;
  30.              printf("No hay espacio suficiente para la concatenación.\n");
  31.          }
  32.          else{
  33.               i = 0;
  34.               while(cad1[i] != '\0'){
  35.                   cad3[i]=cad1[i];
  36.                   i++;
  37.               }
  38.               j=0;
  39.               while(cad2[j] != '\0'){
  40.                   cad3[i]=cad2[j];
  41.                   j++;
  42.                   i++;
  43.               }
  44.               cad3[i+1]='\0';
  45.          }
  46.          return(tamano);
  47. }

Última edición por minette1988; 09/07/2010 a las 12:10
  #2 (permalink)  
Antiguo 09/07/2010, 12:21
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: concatenar varias cadenas

¿entiendes ese codigo? :/
  #3 (permalink)  
Antiguo 09/07/2010, 12:22
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: concatenar varias cadenas

puedes usar, strcpy, strcat, strlen, para hacer eso
  #4 (permalink)  
Antiguo 09/07/2010, 15:06
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: concatenar varias cadenas

Tienes el problema que longitud_cad es una variable y no una funcion. Reemplaza longitud_cad por strlen que es una funcion que devuelve la longitud de una cadena.
  #5 (permalink)  
Antiguo 10/07/2010, 12:36
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: concatenar varias cadenas

Voy a plantear bien el problema:

1º Introducir dos cadenas de teclado(programa principal).
2º Función que devuelva la longitud de la primera y segunda cadena.
3º Función que concatene ambas cadenas y devuelva como resultado la suma de ambas cadenas.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.      
  6. int main(){
  7.          char cad1[100], cad2[100], cad3[200];//cad3[200] porque es la suma de cad1[100]+cad2[100];
  8.          int long_total;
  9.          int concatenar(char[], char[], char[]);
  10.  
  11.          printf("Introduce una cadena: ");
  12.          scanf("%99s", cad1);
  13.          printf("Introduce una cadena: ");
  14.          scanf("%99s", cad2);
  15.          
  16.  
  17.          long_total=concatenar(cad1, cad2, cad3);
  18.  
  19.          printf("La concatenación tiene un total de %d caracteres.\n", long_total);
  20. }
  21. int long_cad(char cad1[]){
  22.          int i;
  23.          i=0;
  24.          
  25.  
  26.          while(cad1[i] != '\0')
  27.               i++;
  28.        
  29.          return(i);
  30. }
  31.  
  32. int concatenar(char cad1[], char cad2[], char cad3[]){
  33.                int tamano;
  34.                int i, j;
  35.                int error=1;
  36.  
  37.                tamano=long_cad(cad1) + long_cad(cad2);
  38.  
  39.                if(tamano > sizeof(cad3)){
  40.                    error=0;
  41.                    printf("No hay espacio suficiente para la concatenacion.\n");
  42.                }
  43.                else{
  44.  
  45.                    i = 0;
  46.  
  47.                    while(cad1[i] != '\0'){
  48.                       cad3[i]=cad1[i];
  49.                       i++;
  50.                    }
  51.                    j=0;
  52.  
  53.                    while(cad2[j] != '\0'){
  54.                      cad3[i]=cad2[j];
  55.                      j++;
  56.                      i++;
  57.                    }
  58.                    cad3[i+1]='\0';
  59.                }    
  60.                return(error);
  61. }

Resultado de la compilación:
Introduce una cadena: pepe
Introduce una cadena: ana
No hay espacio suficiente para la concatenacion.
La concatenación tiene un total de 0 caracteres.

Última edición por minette1988; 12/07/2010 a las 06:05
  #6 (permalink)  
Antiguo 23/07/2010, 06:46
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: concatenar varias cadenas

Ayudadme con este programa, por favor. Gracias.
  #7 (permalink)  
Antiguo 23/07/2010, 07:45
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: concatenar varias cadenas

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int long_cad(char cad1[]){
  5.          int i=0;
  6.          while(cad1[i] != '\0')
  7.               i++;
  8.          return i;
  9. }
  10.  
  11. char * concatener (char * cad1, chae * cad2)
  12. {
  13.      int longitud = long_cad(cad1) + long_cad(cad2)
  14.      char * buffer  = malloc(longitud * sizeof(char));
  15.      int i=0,j=0;
  16.  
  17.      while (cad1[i] != '\0')
  18.                   buffer[i] = cad1[i++];
  19.      while (cad2{[j] != '\0')
  20.                  buffer[i++] = cad2[j++];
  21.     buffer[i] = '\0'
  22.     return buffer;        
  23. }
  24.  
  25. int main(){
  26.          char cad1[100], cad2[100];
  27.          int long_total;
  28.          char * cadena;
  29.          printf("Introduce una cadena: ");
  30.          scanf("%99s", cad1);
  31.          printf("Introduce una cadena: ");
  32.          scanf("%99s", cad2);
  33.          cadena = concatenar(cad1, cad2);
  34.  
  35.          printf("Resultado de la concatenacion:  %s\n",cadena)
  36.          printf("La concatenación tiene un total de %d caracteres.\n", long_cad(cadena));
  37.          free(cadena);
  38. }

Ahi tenes tu codigo. Use memoria dinamica para realizar la concatenacion. Por eso despues la libero.
Tambien fijate que en la libreria "string.h" ya vienen esta funciones hechas. Pero nunca esta demas volver a hacerlas.
  #8 (permalink)  
Antiguo 23/07/2010, 10:27
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: concatenar varias cadenas

¿Por qué pones el main al final en lugar de al principio?
Si quiero ponerlo al principio que tendría que cambiar?

Por qué en la función concatenar utilizas un puntero a char si lo que interesa es que sea de tipo int ya que lo que queremos es que devuelva la suma de cad1 y cad2

char * concatenar
La instrucción que sigue no entiendo lo de buffer puntero a char, ¿la función malloc?
Lo de sizeof(char) es el tamaño en bytes de la variable tipo char?

char * buffer = malloc(longitud * sizeof(char));
  #9 (permalink)  
Antiguo 23/07/2010, 11:13
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: concatenar varias cadenas

Si el main no esta a lo ultimo, el compilador no va a encontrar las demas funciones que defini. Obviamente que hay una solucion para esto que es agregar la cabeceras al principio:

int long_cad(char cad1[]);
char * concatener (char * cad1, chae * cad2);

Si agregas eso entre los #include y la primera funcion, da lo mismo el orden en que defina las funciones.

Mi funcion concatener devuelve una cadenas de caracteres, no de enteros. Vos acasos querias que devuelva solo la longitud de la concatenacion??
En mi caso devuelve el puntero a la cadena concatenada.

La variable buffer la utilizo para llevar un puntero a memoria. En donde guardare la cadena final. Con malloc lo que se hace es reservar memoria para la cadena. Por eso reservo la suma de las longitudes y lo multiplico por sizeof(char) para me uqe guarde espacio para caracteres.

Despues lo que hago en la funcion concatener, return buffer, devuelvo el valor de la variable buffer, que tiene la direccion a la reserva de memoria. Por lo tanto, al retorno tengo una cadena de caracteres concatenada.

Para el trabajo de cadenas de caracteres te recomiendo que lees sobre punteros en C++....
  #10 (permalink)  
Antiguo 23/07/2010, 12:51
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: concatenar varias cadenas

La reserva de memoria para un string tiene que considerar el caracter de marca de fin de string, por lo tanto, al pedir memoria, hay que sumar 1 a la cantidad de caracteres "visibles".

Para el caso particular, la variable buffer, al solicitar memoria tiene que sumar 1 a lo que ya pide, quedaria:

char * buffer = malloc(longitud +1);

En lenguaje C se define que sizeof(char) es 1, asi que es posible ahorrarse la multiplicacion por 1.
  #11 (permalink)  
Antiguo 23/07/2010, 13:06
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: concatenar varias cadenas

El sizeof(char) lo deje para que sea mas descriptivo el ejemplo y entienda mejor lo que es memoria dinamica. Para que no se cierre a que solo se usa con caracteres.

Y es verdad, me falto el +1 para el caracter nulo asi se detecta el fin de cadena.

Etiquetas: cadenas, concatenar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:02.