C/Visual C - guardar palabras de una cadena en arreglos

   
Vista:
Imágen de perfil de daniel

guardar palabras de una cadena en arreglos

Publicado por daniel (4 intervenciones) el 04/06/2015 11:37:51
tenemos la cadena siguiente:
char cad[19]="esto es un mensaje";
y quiero llevaro a otro arreglo pero sus elementos son sus palabras, es decir:
char copia[4][20]={"esto","es","un","mensaje"};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <string.h>
using namespace std;
void main(){
 char cad[80]="esto es un mensaje";
 char copia[80][20];  //con[80] es longitud de cada palabra
 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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

guardar palabras de una cadena en arreglos

Publicado por Tom (481 intervenciones) el 10/06/2015 14:56:38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
char	cad[] = "Esto es un mensaje";
	char	**res;
	int		i, j, off;
 
	i = j = off = 0;
 
	while(1) {
		if((cad[i] == ' ') || (cad[i] == 0)) {
			res = (char **)realloc(res, (j + 1) * sizeof(char*));
			res[j++] = (cad + off);
			if(cad[i] == 0) {
				break;
			}
			cad[i] = 0;
			off = ++i;
		} else {
			i++;
		}
	}
	for(i = 0; i < j; i++) {
		printf("%d -> '%s'\n", i, res[i]);
	}

Supongo que con eso del "metodo de los tokens" te refieres a usar strtok(). Pues bastante mejor si lo usas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar