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

[SOLUCIONADO] guardar palabras de una oracion en arreglos

Estas en el tema de guardar palabras de una oracion en arreglos en el foro de C/C++ en Foros del Web. tenemos la cadena siguiente: char cad[80]="esto es un mensaje"; y quiero llevaro a otro arreglo pero sus elementos son sus palabras, es decir: char copia[80][20]={"esto","es","un","mensaje"}; ...
  #1 (permalink)  
Antiguo 03/06/2015, 17:54
 
Fecha de Ingreso: abril-2015
Mensajes: 8
Antigüedad: 9 años
Puntos: 0
guardar palabras de una oracion en arreglos

tenemos la cadena siguiente:
char cad[80]="esto es un mensaje";
y quiero llevaro a otro arreglo pero sus elementos son sus palabras, es decir:
char copia[80][20]={"esto","es","un","mensaje"};
Código:
#include <iostream>
#include <string.h>
using namespace std;
void main(){
	char cad[80]="esto es un mensaje", copia[80][20];
	int con[80], num_p=1,k=0;//num_p es el numero de palabras
	for (int i = 0; i < strlen(cad); i++){
		if (cad[i] == ' ')num_p++;
	}
	for (int i = 0; i < num_p; i++){
		con[i] = 0;
	}
	num_p = 1; k = 0;
	for (int i = 0; cad[i] != '\0';i++){
		if (cad[i] == ' '){
			num_p++; k = 0;
		}
		else{
			cad[num_p - 1]++;
			copia[num_p - 1][k++] = cad[i];
			}
	}
	for (int i = 0; i < num_p; i++){
		cout << copia[i] << "\n";
	}
	system("PAUSE");
}
se que hay un metodo de los tokens, pero yo quiero sin eso....consejos por favor
  #2 (permalink)  
Antiguo 04/06/2015, 08:44
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: guardar palabras de una oracion en arreglos

Hola:

El programa tiene algunos errores "generales".
Por ejemplo, si estás en C++ deberás usar cstring y no string.h

Además, cout pertenece a la librería iostream, así que lo que tienes no te puede compilar. Y también faltaría añadir el namespace std o anteponer el ámbito std antes de cout std::cout

Por último, en C++ el programa principal es una función de tipo int, no void, y ha de retornar 0.

Bueno, y sobre la duda en cuestión, lo que pones parece demasiado complicado.
Yo lo resolvería así:
Usa 3 contadores, uno para recorrer la frase orígen hasta el final, otro para incrementar el array que guarda cada palabra por separado, y un último para poder asociar cada caracter a copiar dentro del primer array con el segundo.

Y aunque no es lo correcto, te pongo el código explicado:
Código C++:
Ver original
  1. #include <cstring>
  2. #include <iostream>
  3.  
  4. int main()
  5. {
  6.     char cad[80]="esto es un mensaje", copia[80][20];
  7.     int num_palabras=0;
  8.     int pos=0;
  9.     for (int i = 0; i < strlen(cad); i++)
  10.     {
  11.         if (cad[i] == ' ') //si me encuentro un espacio
  12.         {
  13.             copia[num_palabras][pos]='\0';  //Poner un caracter '\0' al final del array que contiene la palabra separada,
  14.                                             //para que la cadena quede bien terminada.
  15.             num_palabras++;                 //Pasaré al siguiente índice del array que contiene las palabras separadas
  16.             pos=0;                          //y al primer indice de éste:            
  17.             i++;                            //me salto ese espacio
  18.         }
  19.         copia[num_palabras][pos]=cad[i];
  20.         pos++;
  21.     }
  22.     copia[num_palabras][pos]='\0'; //añado un '\0' a la última palabra
  23.     //mostrar el resultado
  24.     for (int i=0;i<=num_palabras;i++)
  25.     {
  26.         std::cout<<copia[i]<<std::endl;
  27.  
  28.     }
  29.     return 0;
  30. }
__________________
Mi calculadora en Qt
  #3 (permalink)  
Antiguo 04/06/2015, 10:09
 
Fecha de Ingreso: abril-2015
Mensajes: 8
Antigüedad: 9 años
Puntos: 0
Respuesta: guardar palabras de una oracion en arreglos

Cita:
Iniciado por dehm Ver Mensaje
Hola:

El programa tiene algunos errores "generales".
Por ejemplo, si estás en C++ deberás usar cstring y no string.h

Además, cout pertenece a la librería iostream, así que lo que tienes no te puede compilar. Y también faltaría añadir el namespace std o anteponer el ámbito std antes de cout std::cout

Por último, en C++ el programa principal es una función de tipo int, no void, y ha de retornar 0.

Bueno, y sobre la duda en cuestión, lo que pones parece demasiado complicado.
Yo lo resolvería así:
Usa 3 contadores, uno para recorrer la frase orígen hasta el final, otro para incrementar el array que guarda cada palabra por separado, y un último para poder asociar cada caracter a copiar dentro del primer array con el segundo.

Y aunque no es lo correcto, te pongo el código explicado:
Código C++:
Ver original
  1. #include <cstring>
  2. #include <iostream>
  3.  
  4. int main()
  5. {
  6.     char cad[80]="esto es un mensaje", copia[80][20];
  7.     int num_palabras=0;
  8.     int pos=0;
  9.     for (int i = 0; i < strlen(cad); i++)
  10.     {
  11.         if (cad[i] == ' ') //si me encuentro un espacio
  12.         {
  13.             copia[num_palabras][pos]='\0';  //Poner un caracter '\0' al final del array que contiene la palabra separada,
  14.                                             //para que la cadena quede bien terminada.
  15.             num_palabras++;                 //Pasaré al siguiente índice del array que contiene las palabras separadas
  16.             pos=0;                          //y al primer indice de éste:            
  17.             i++;                            //me salto ese espacio
  18.         }
  19.         copia[num_palabras][pos]=cad[i];
  20.         pos++;
  21.     }
  22.     copia[num_palabras][pos]='\0'; //añado un '\0' a la última palabra
  23.     //mostrar el resultado
  24.     for (int i=0;i<=num_palabras;i++)
  25.     {
  26.         std::cout<<copia[i]<<std::endl;
  27.  
  28.     }
  29.     return 0;
  30. }
gracias, me ayudo mucho......ahhhh eso de los errores se debe que en clase usamos el visual c++......gracias de todos modos

Etiquetas: arreglos, char, int, palabras
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 18:16.