SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: pacorubio77 en Jueves 29 de Marzo de 2007, 17:31

Título: Hola Es Una Duda...
Publicado por: pacorubio77 en Jueves 29 de Marzo de 2007, 17:31
Hola yo tengo string palabras[100],es un strind de palabras,en el que yo guardaré palabras..como puedo incializarlo,es decir que los 100 sitios de almacenamiento no haya nada o lo que es igual a ""?

me podeis ayudar?
y como puedo mostrar por pantalla cada vez que guardo algo..o una vez que he guardado todo?
Título: Re: Hola Es Una Duda...
Publicado por: AnioN en Jueves 29 de Marzo de 2007, 17:35
para inicializarlo es facil:

Código: Text
  1. char cad[100] = " ";
  2.  
Título: Re: Hola Es Una Duda...
Publicado por: pacorubio77 en Jueves 29 de Marzo de 2007, 17:40
hola,,me habeis puesto   char cad[100]="",lo primero es que lo mio es un string,,se haría de igual forma?

y otra pregunta,,"" pone todos a "", ??? es una pregunta...
Título: Re: Hola Es Una Duda...
Publicado por: Bicholey en Jueves 29 de Marzo de 2007, 18:00
:D  :D

Podeis hacer algo un poco màs didactico y como decian en mi escuela, si no sabes como es que se inicializa la variable, pues imprimela y quitate de dudas...
Título: Re: Hola Es Una Duda...
Publicado por: AnioN en Jueves 29 de Marzo de 2007, 18:01
el tipo de dato string no existe en C++ ni en C, por lo cual manejas la cadena de caracteres como un vector de caracteres. Cuando haces esto:

Código: Text
  1.  cad[100]=""
  2.  
Lo que haces es crear un vector de 100 elementos y los inicializas a " ".
Título: Re: Hola Es Una Duda...
Publicado por: pacorubio77 en Jueves 29 de Marzo de 2007, 18:03
perdona..pero el dato tipo string si que existen en C++,miralo y verás como si existe...
Título: Re: Hola Es Una Duda...
Publicado por: Mollense en Jueves 29 de Marzo de 2007, 18:16
No, pacorubio77. AnioN tiene razón.-
Título: Re: Hola Es Una Duda...
Publicado por: pacorubio77 en Jueves 29 de Marzo de 2007, 18:21
Vamos a ver,,vosotros me estais diciendo que no existe string palabra[100]???

eso me estais diciendo?

yo lo entiendo que es un vector de strings..no?
Título: Re: Hola Es Una Duda...
Publicado por: JuanK en Jueves 29 de Marzo de 2007, 18:34
si
Título: Re: Hola Es Una Duda...
Publicado por: Mollense en Jueves 29 de Marzo de 2007, 18:56
Un ejemplo:

Un vector de 5 cadenas no es mas que una matriz de caracteres.-
Código: Text
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.   char cadena[5][100];
  5.   int i;
  6.   for(i=0; i<5; i++){
  7.     printf("Ingresa la palabra o frase %i: ",i+1);
  8.     gets(cadena[i]);
  9.   }
  10.   for(i=0; i<5; i++){
  11.     printf("La palabra %i es: %s\n",i+1,cadena[i]);
  12.   }
  13.   getchar();
  14.   return 0;
  15. }
  16.  
Título: Re: Hola Es Una Duda...
Publicado por: JuanK en Jueves 29 de Marzo de 2007, 19:20
Cita de: "Angel_K_ido"
Un ejemplo:

Un vector de 5 cadenas no es mas que una matriz de caracteres.-
Código: Text
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.   char cadena[5][100];
  5.   int i;
  6.   for(i=0; i<5; i++){
  7.     printf("Ingresa la palabra o frase %i: ",i+1);
  8.     gets(cadena[i]);
  9.   }
  10.   for(i=0; i<5; i++){
  11.     printf("La palabra %i es: %s\n",i+1,cadena[i]);
  12.   }
  13.   getchar();
  14.   return 0;
  15. }
  16.  
Desde el punto de vista que todas las cadenas tuviesen igual longitud SI.

Pero desde el punto de vista de que no todas las cadenas tienen igual longitud NO.

en ese caso serian lo que en CLR se le llama un jagged array en el cual cada miembro del arrray contiene un array (o un puntero como,lo quieran ver) que puede direccionar diferentes longitudes a los demas.
Título: Re: Hola Es Una Duda...
Publicado por: Mollense en Jueves 29 de Marzo de 2007, 19:33
mmm... no sabía eso, voy  investigar. :smartass:

En este caso. ¿Cómo es el manejo de la memoria?¿No se reserva una longitud fija para cada cadena?
Título: Re: Hola Es Una Duda...
Publicado por: Eternal Idol en Jueves 29 de Marzo de 2007, 19:33
Cuidado que estan confundiendo ... en C++ standard existe una clase (de la STL) llamada string. Tal vez para lo tuyo podrias hacer un for y asignarle "" a cada elemento ...
Título: Re: Hola Es Una Duda...
Publicado por: pacorubio77 en Jueves 29 de Marzo de 2007, 19:42
hombre,el último que me ha contestado es el que tenia algo de idea de strings,en c++ si que existe el tipo string.Bueno no me habeis aclarado mucho.pero voy a haceros otra pregunta,relacionado con lo mismo...si yo quiero imprimir mi vector?
Es decir yo tengo definido string palabras[100],correcto?

pero ahora en mi programa..para ver resultados me gustaria imprimir por pantalla(siempre en C++) mi string,y yo pongo

cout<<palabras<<endl;  //pero no me sale el vector,,si no que el resultado que me
sale es 0bhffx6...etc...eso porque es?me podeis decir como imprimrlo por pantalla de una manera correcta?

Ahh un dato..yo creia que esto que me salia era por no inicializar,,pero al inicializarlo a "",me sale lo mismo...
Título: Re: Hola Es Una Duda...
Publicado por: Eternal Idol en Jueves 29 de Marzo de 2007, 19:46
Cita de: "pacorubio77"
hombre,el último que me ha contestado es el que tenia algo de idea de strings,en c++ si que existe el tipo string.Bueno no me habeis aclarado mucho.pero voy a haceros otra pregunta,relacionado con lo mismo...si yo quiero imprimir mi vector?
Aca tenes un ejemplo funcional:
Código: Text
  1.  
  2.   string palabras[100];
  3.   for (int x = 0; x &#60; 100; x++) { palabras[x] = &#34;&#34;; } //tambien podes usar palabras[x].clear();
  4.   palabras[0] = &#34;hola&#34;;
  5.   cout &#60;&#60; palabras[0] &#60;&#60; endl;
  6.   cout &#60;&#60; palabras[1] &#60;&#60; endl;
  7.  
  8.  

El primero pondra hola y fin de linea y el segundo solo fin de linea al haber sido inicializado correctamente.
Título: Re: Hola Es Una Duda...
Publicado por: JuanK en Jueves 29 de Marzo de 2007, 20:18
Cita de: "Angel_K_ido"
mmm... no sabía eso, voy  investigar. :smartass:

En este caso. ¿Cómo es el manejo de la memoria?¿No se reserva una longitud fija para cada cadena?
No.
lo que si es fijo es el tamaño del puntero, pero no la porción de memoria que este puede direccionar, esa es variable.

cuando haces
Código: Text
  1. char chr[x][y]
  2.  

estas diciendo que cada puntero chr[0..(x-1)] puede direccionar 'y' bytes de memoria, en ese caso por eso siempre la cadena seria máximo de tamaño 'y' o uno menos se se tiene en cuenta el carácter '\0' al final.

para que las cadenas fueran de diferente longitud (sin usar la clase string de C++) deberas usar algo como esto: (ejemplo array de dos cadenas)
Código: Text
  1.  
  2. char **chr
  3.  
  4. chr = (char**)malloc(sizeof(char *) * 2 );
  5.  
  6. //cadena 10 caracteres
  7. chr[0] = (char*)malloc(sizeof( char *)  * 11);
  8.  
  9. strcpy(chr[0], &#34;0123456789&#34;);
  10. chr[0][10]='&#092;0';
  11.  
  12. //cadena 5 caracteres
  13. chr[1] = (char*)malloc(6);
  14.  
  15. strcpy(chr[1], &#34;01234&#34;);
  16. chr[1][6]='&#092;0';
  17.  

PD: Espero que no este mal el ejemplo, no lo he pasado por compilador y ya casi no codifico nada  en este lenguaje[/size]
Título: Re: Hola Es Una Duda...
Publicado por: Mollense en Jueves 29 de Marzo de 2007, 20:54
No importa lo si no compila, igual después lo pruebo.

Para aclarar mi duda me sirve.

Gracias.-
Título: Re: Hola Es Una Duda...
Publicado por: AnioN en Jueves 29 de Marzo de 2007, 21:08
Código: Text
  1. #include &#60;iostream&#62;
  2. #include &#60;string.h&#62;
  3. #include&#60;stdlib.h&#62;
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.   char **chr;
  10.  
  11.   chr = (char**)malloc(sizeof(char *) * 2 );
  12.  
  13.   *chr = (char*)malloc(sizeof( char *)  * 11);
  14.  
  15.   strcpy(*chr, &#34;0123456789&#092;0&#34;);
  16.  
  17.   cout &#60;&#60; *chr &#60;&#60; endl;
  18.  
  19.   chr++;
  20.  
  21.   *chr = (char*)malloc(6);
  22.  
  23.   strcpy(*chr, &#34;01234&#092;0&#34;);
  24.  
  25.   cout &#60;&#60; *chr &#60;&#60; endl;
  26.  
  27.   return 0;
  28. }
  29.  
Título: Re: Hola Es Una Duda...
Publicado por: exjoe en Martes 10 de Abril de 2007, 23:55
esta es una de las vias, o sea debes construir cada elemento con NULL o nada;
string palabra[100]

for(int i=0;i<=100;i++,palabra="");// para hacerlo asi debes de acordarte del punto y coma al fina
 

si te resulta engorroso hacerlo asi lo puedes separar
o sea
for(int i=0;i<=100;i++)
     palabra="");
// y ya esta resuelto bueno chao
espero resuelvas con esto
Título: Re: Hola Es Una Duda...
Publicado por: Eternal Idol en Miércoles 11 de Abril de 2007, 08:12
Cita de: "exjoe"
esta es una de las vias, o sea debes construir cada elemento con NULL o nada;
string palabra[100]

for(int i=0;i<=100;i++,palabra="");// para hacerlo asi debes de acordarte del punto y coma al fina
¿Y cual es la diferencia con el codigo que puse cuando la pregunta fue hecha? Vuelvo a decir que me parece bien que se quiera colaborar pero me parece mejor que esperen a que haya una duda sin resolver.