elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas con c++.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con c++.  (Leído 2,295 veces)
#Aitor

Desconectado Desconectado

Mensajes: 173



Ver Perfil
Problemas con c++.
« en: 24 Marzo 2014, 08:09 am »

Hola buenas estoy empezando con C++ y se me puse hacer el tonto, quería escribir un string en la consola, y que en la salida de ésta lo mostrase al revés.

Estuve mirando y lo que más fácil me pareció fue contar los caracteres que tenía el string, meterlo en un ciclo y que los recorriese uno a uno desde el final hasta el principio. De modo que generé este código.

Código
  1. #include <iostream>
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. using namespace std;
  6.  
  7. int main() {
  8.  
  9.    string cadena;
  10.    cin >> cadena;
  11.  
  12.    int f = strlen(Cadena);
  13.  
  14.  
  15. while ( f >= 0){
  16. cout << char(Cadena[f-1]);
  17. f--;
  18.  
  19. }
  20.  
  21. }
  22.  

Pero no se podía compilar, generaba un error que decía Cadena was not declared in the scape. En la linea 12 es decir...

Código
  1.    int f = strlen(Cadena);

Después estuve leyendo sobre Strlen en la página de c++
http://www.cplusplus.com/reference/cstring/strlen/

Por lo que acabé generando este código.

Código
  1. #include <iostream>
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. using namespace std;
  6.  
  7. int main() {
  8.  
  9.    char Cadena[256];
  10.    gets(Cadena);
  11.  
  12. int f = strlen(Cadena);
  13.  
  14.  
  15. while ( f >= 0){
  16. cout << char(Cadena[f-1]);
  17. f--;
  18.  
  19. }
  20.  
  21. }

En este, si compilaba y funcionaba perfecto, pero no entendía muy bien el código, en especial

Código
  1. char Cadena[256];

¿A qué se refiere ese 256 en ASCII (Supongo)? ¿Por qué sin el genera un error en el gets?

Y por último.. ¿Qué es gets?

Código
  1. gets(Cadena);

Parece que actuase como un Cin ¿Cuál es la diferencia?.

Gracias por la ayuda.

Saludos!


En línea

Mi algoritmo en PHP (estupideces y más).
Código
  1. while($Se_feliz){
  2.  Piensa_un_OBJETIVO(); // Sin excusas!
  3.  if($Tienes_un_objetivo){
  4.    Suspira(); // Sé paciente.
  5.    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
  6.      //RETURN; ¿O volvemos a empezar?
  7.    }else{
  8.      Inténtalo_de_nuevo();
  9.    }
  10.  }
  11. }
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problemas con c++.
« Respuesta #1 en: 24 Marzo 2014, 10:44 am »

Estas mezclando muchas cosas....

El primer ejemplo funcionaba, lo que pasa es que no tienes que usar srttlen sino el método size:

Cadena.size()

Tampoco hace falta hacerle un cast a los caracteres que saques por [].


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problemas con c++.
« Respuesta #2 en: 24 Marzo 2014, 11:48 am »

Código
  1. string cadena;

"cadena", tal y como la has declarado, es de tipo "string".

En C++, "string" es una clase y como tal tiene una serie de funciones y métodos a modo de interfaz que te permiten utilizarla.

Para el caso que comentas debes saber que las clases de C++ no las puedes usar como si fuese C. Son cosas diferentes.

Si miras la documentación de la clase string, verás que tiene un método "size( )", como te comento amchacon. Este método te devuelve la longitud de la cadena almacenada en el objeto correspondiente.

Código
  1. #include <iostream>
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.  string cadena;
  10.  cin >> cadena;
  11.  
  12.  int f = cadena.size( );
  13.  
  14.  while ( f >= 0)
  15.  {
  16.    cout << char( cadena[ f-1 ] );
  17.    f--;
  18.  }
  19. }

Ahora el código compila, que no es poco. Sin embargo, tu bucle tiene demasiado código para lo que hace:

* Si usas C++ no pongas includes de C ( los que acaban en .h )
* No hace falta hacer un cast a char, ya que la clase std::string gestiona un array de char internamente.
* f-1 y f-- viene a ser más o menos lo mismo... estás haciendo dos veces lo mismo.
* while ( f>=0 )... si estás decrementando dentro del bucle tienes un problema... si f == 0, entonces cout << char( cadena[ 0-1 ] ); ... te puedes hacer a la idea.

Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.  string cadena;
  9.  cin >> cadena;
  10.  
  11.  int f = cadena.size( ) - 1;
  12.  
  13.  while ( f >= 0)
  14.  {
  15.    cout << cadena[ f ];
  16.    f--;
  17.  }
  18. }

Por cierto, aunque no venga a cuento del hilo:

Código
  1. while($Se_feliz){
  2.  Piensa_un_OBJETIVO(); // Sin excusas!
  3.  if($Tienes_un_objetivo){
  4.    Suspira(); // Sé paciente.
  5.    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
  6.      //RETURN; ¿O volvemos a empezar?
  7.    }else{
  8.      Inténtalo_de_nuevo();
  9.    }
  10.  }
  11. }

Así queda más claro ;)
« Última modificación: 24 Marzo 2014, 11:53 am por eferion » En línea

#Aitor

Desconectado Desconectado

Mensajes: 173



Ver Perfil
Re: Problemas con c++.
« Respuesta #3 en: 24 Marzo 2014, 12:16 pm »

Buenas, muchas gracias a los dos por resolver mis dudas en gran medida.

Se agradece la limpieza del código tanto  el del hilo como el de la firma. También me llamó mucho la atención el -1 que usaba en el [f-1] acabar poniéndolo después de contar la longitud de caracteres. Pareciese una obviedad pero no lo había visto tan claro como hasta ahora.

¿A qué os referís cuando decís cast?

También aprovecho y os pregunto una cosita más, actualmente hago 'intento' de aprender c++ de Pau Fernández (No sé si lo conoceréis, pero me gustó su forma de explicar en los vídeos, y su página). Ahora bien, ¿recomendáis algún otro que no sea 0utkast? Sinceramente con Jesús conde (0utkast) acabo muriendo de aburrimiento.

¿Hay algún reference como en php lo es www.php.net? Me refiero a algo oficial o por el estilo.

Sin más, de nuevo agradezco la ayuda aquí dada.

Un saludo!
« Última modificación: 24 Marzo 2014, 12:19 pm por #Aitor » En línea

Mi algoritmo en PHP (estupideces y más).
Código
  1. while($Se_feliz){
  2.  Piensa_un_OBJETIVO(); // Sin excusas!
  3.  if($Tienes_un_objetivo){
  4.    Suspira(); // Sé paciente.
  5.    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
  6.      //RETURN; ¿O volvemos a empezar?
  7.    }else{
  8.      Inténtalo_de_nuevo();
  9.    }
  10.  }
  11. }
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problemas con c++.
« Respuesta #4 en: 24 Marzo 2014, 12:26 pm »

Yo la referencia la cojo de aquí:
http://www.cplusplus.com/reference/

Ahí arriba en la barra "buscar", pones el objeto que quieras mirar y ya lo tienes. Otra opción es buscarlo en google con la sufijo "C++", suele ser el primer resultado:
Citar
string c++
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problemas con c++.
« Respuesta #5 en: 24 Marzo 2014, 12:32 pm »

¿A qué os referís cuando decís cast?

Cast es una operación de conversión:

Código
  1. int numero = -5;
  2.  
  3. cout << numero << endl << (unsigned int ) numero << endl;

Las conversiones, en C++, se pueden hacer de dos formas:

* Usando la sintaxis de C (opción no recomendable ), esto es, poniendo entre paréntesis el tipo al que se quiere convertir el dato ( como el ejemplo anterior ).

* Usando la sintaxis de C++. C++ dispone de herramientas para hacer conversiones ( static_cast, dynamic_cast, reinterpret_cast, const_cast ). Cada una tiene un uso determinado, aunque las más comunes son static_cast y dynamic_cast.

Algunas de las ventaja de este tipo de conversiones frente a las clásicas de C:

* Es más fácil localizar las conversiones buscando en el código. No es lo mismo buscar static_cast que "( int )" + "(int)" + "( int)" + "(int )" + ...

* Ofrecen más seguridad en la conversión. Si la conversión no es segura o no se puede realizar aparecerá un error en compilación... sin embargo los conversores de C no dan nunca error.
En línea

#Aitor

Desconectado Desconectado

Mensajes: 173



Ver Perfil
Re: Problemas con c++.
« Respuesta #6 en: 26 Marzo 2014, 03:22 am »

Más o menos me hago una idea, gracias de nuevo a los dos.

Saludos!
En línea

Mi algoritmo en PHP (estupideces y más).
Código
  1. while($Se_feliz){
  2.  Piensa_un_OBJETIVO(); // Sin excusas!
  3.  if($Tienes_un_objetivo){
  4.    Suspira(); // Sé paciente.
  5.    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
  6.      //RETURN; ¿O volvemos a empezar?
  7.    }else{
  8.      Inténtalo_de_nuevo();
  9.    }
  10.  }
  11. }
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines