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

Concatener cadenas de punteros en c

Estas en el tema de Concatener cadenas de punteros en c en el foro de C/C++ en Foros del Web. Hola. Necesito ayuda , no puedo concatenar cadenas de punteros con la funcion strcat. El ejercicio es este: "Escriba un programa que utilice la generacion ...
  #1 (permalink)  
Antiguo 04/10/2015, 03:01
 
Fecha de Ingreso: octubre-2015
Ubicación: asfsfasfa
Mensajes: 4
Antigüedad: 9 años, 1 mes
Puntos: 0
Exclamación Concatener cadenas de punteros en c

Hola. Necesito ayuda , no puedo concatenar cadenas de punteros con la funcion strcat.
El ejercicio es este:

"Escriba un programa que utilice la generacion numeros aleatorios para crear oraciones. El programa debe utilizar cuatro arreglos de apuntadores a char llamados, articulo, sustantivo,verbo
y preposicion. El programa debe crear una oracion mediante la seleccion de una palabra al azar de cada arreglo en el siguiente orden: articulo, sustantivo, verbo, preposicion, articulo y
sustantivo. Al elegir cada palabra, ésta se debe concatenar a las palabras previas en un arreglo lo suficientemente grande para almacenar una oracion completa. Las palabras deben separarse
con espacios. Cuando se imprime la oracion final , ésta debe comenzar con una letra mayúscula y terminar con punto. El programa debe generar 20 oraciones.
Los arreglos deben rellenarse de la siguiente manera:
articulo[5]={"el","la","un","algun","cualquiera"};
sustantivo[5]={"nino","nina","perro","pueblo","carro"};
verbo[5]={"condujo","brinco","corrio","camino","salto"};
preposicion[5]={"hacia","desde","sobre","bajo","en"}; "

Entonces lo que hago es declarar los arreglos con punteros de la siguiente forma:

char* articulo[5]={"el","la","un","algun","cualquiera"};
char* sustantivo[5]={"nino","nina","perro","pueblo","carro"};
char* verbo[5]={"condujo","brinco","corrio","camino","salto"};
char* preposicion[5]={"hacia","desde","sobre","bajo","en"};

y usar la funcion strcat de esta forma: strcat(articulo,sustantivo).
El programa me compila bien, pero al abrir me sale que ha ocurrido un error y se cierra.
Necesito ayuda ,estoy desesperado , llevo tres días tratando de hacerlo y no sé cual es mi error.
Se los agradecería mucho.
  #2 (permalink)  
Antiguo 04/10/2015, 03:09
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: Concatener cadenas de punteros en c

Has probado con:
char articulo[5][]={"el","la","un","algun","cualquiera"};
Quizás así se solucione.
  #3 (permalink)  
Antiguo 04/10/2015, 03:23
 
Fecha de Ingreso: octubre-2015
Ubicación: asfsfasfa
Mensajes: 4
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Concatener cadenas de punteros en c

Cita:
Iniciado por aguml Ver Mensaje
Has probado con:
char articulo[5][]={"el","la","un","algun","cualquiera"};
Quizás así se solucione.
Gracias por responder , pero no se solucionó así :(
  #4 (permalink)  
Antiguo 04/10/2015, 05:22
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: Concatener cadenas de punteros en c

Ya vi cual es tu fallo. El fallo es que al usar strcat con los arrais pisas otras cadenas. Tienes que usar un buffer grande que no se desborde:
Código C:
Ver original
  1. char oracion[200]={0};
  2. strcat(oracion, articulo[x]);
  3. strcat(oracion, sustantivo[i]);
  4. strcat(oracion, verbo[z]);
  5. strcat(oracion, adjetivo[n]);

Se puede ir reservando memoria dinámicamente con malloc y realloc pero no se si ya viste esos temas por eso puse un valor fijo para el bufffer.
  #5 (permalink)  
Antiguo 04/10/2015, 14:03
 
Fecha de Ingreso: octubre-2015
Ubicación: asfsfasfa
Mensajes: 4
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Concatener cadenas de punteros en c

Cita:
Iniciado por aguml Ver Mensaje
Ya vi cual es tu fallo. El fallo es que al usar strcat con los arrais pisas otras cadenas. Tienes que usar un buffer grande que no se desborde:
Código C:
Ver original
  1. char oracion[200]={0};
  2. strcat(oracion, articulo[x]);
  3. strcat(oracion, sustantivo[i]);
  4. strcat(oracion, verbo[z]);
  5. strcat(oracion, adjetivo[n]);

Se puede ir reservando memoria dinámicamente con malloc y realloc pero no se si ya viste esos temas por eso puse un valor fijo para el bufffer.
Gracias por tu ayuda, al fin pude hacerlo. Pero ahora no se como convertir la primera letra de cada oracion a mayúsculas, la funcion toupper no me sirve.

Lo hago así:
strcat(oracion,articulo[rand () % (4-0+1)+0]);
strcat(oracion," ");
strcat(oracion, sustantivo[rand () % (4-0+1)+0]);
strcat(oracion," ");
strcat(oracion, verbo[rand () % (4-0+1)+0]);
strcat(oracion," ");
strcat(oracion, preposicion[rand () % (4-0+1)+0]);
strcat(oracion," ");
strcat(oracion, articulo[rand () % (4-0+1)+0]);
strcat(oracion," ");
strcat(oracion, sustantivo[rand () % (4-0+1)+0]);
strcat(oracion,".");
cout<<oracion<<endl;

Última edición por sebasOwens; 04/10/2015 a las 14:12
  #6 (permalink)  
Antiguo 05/10/2015, 03:28
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Concatener cadenas de punteros en c

y por qué razón no te vale toupper??? Es una función que recibe un carácter y lo devuelve convertido en mayúsculas.

Lo que pasa es que no modifica el carácter que le pasas... pero para corregir eso basta con que sustituyas el primer caracter de cada oración por lo que te devuelva toupper.

Un saludo
  #7 (permalink)  
Antiguo 05/10/2015, 06:05
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: Concatener cadenas de punteros en c

Opino igual que eferion, simplemente con oracion[0]=toupper(oracion[0]) lo solucionas.

Etiquetas: c++, punteros
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 14:00.