Ver Mensaje Individual
  #15  
Antiguo 01-06-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si roman así es, también opino que se está acarreando el problema. No me caben dudas que en ese codigo existen bucles, funciones y condicionales aunque no se visualicen.
En el mensaje #2 ya había objetado esas restricciones tan singulares, por que apegándonos a la letra del enunciado:
  • Si no se puede usar funciones, no se puede realizar en C/C++. ( int main() {...} también es una función ).
  • Si no se pueden usar bucles, no se puede resolver usando for, while, do ni tampoco goto.
  • Si no se pueden usar condicionales, no se puede usar el operador ternario ( este último es un condicional con tres argumentos ).
Pero como cuando se hablaba de bucles sólo se excluía a for y while quedando goto dentro de lo permitido y cuando se excluía a if () se incluia al operador ternario... seguí buscándole la vuelta


Ñuño, básicamente,
  • string::begin() : devuelve un iterador al comienzo de la cadena normal.
  • string::end() : devuelve un iterador al final de la cadena normal.
  • string::rbegin() : devuelve un iterador al comienzo de la cadena inversa (el último caracter de la cadena normal).
  • string::rend() : devuelve un iterador al final de la cadena inversa ( el primer caracter de la cadena normal).
Un ejemplo:
Código PHP:
{
  
string str "Recorrer string con iterators.";

  
string::const_iterator ci;
  
string::reverse_iterator ri;

  
// recorrido normal de la cadena
  
for( ci str.begin(); ci != str.end(); ci++ ) cout << *ci;  
  
cout << endl;

  
// recorrido inverso de la cadena
  
for( ri str.rbegin(); ri != str.rend(); ri++ ) cout << *ri;  
  
cout << endl;
  
// O, con el mismo resultado anterior: 
  
cout << stringstr.rbegin(), str.rend() ); 
  
cout << endl;

  
// entonces si
  
ci str.begin();
  
ri str.rbegin();
  
cout << *ci << " " << *ri << endl;      // se muestra: R .

  // y si
  
ci str.end();
  
ri str.rend();
  
cout << *--ci << " " << *--ri << endl;  // se muestra: . R   (*)
... 
(*) --, por que los iteradores ci y ri están sobre '\0'

Aquí van unos enlaces que te van a ser mas útiles que mi pobre explicación:transform y toda esa linea no es necesaria para el caso de los números, lo había usado para pasar a mayúsculas en una de las pruebas que hice con cadenas. No lo borré y terminé copiándolo/pegándolo con el resto, disculpa el descuido el código debería haber quedado así:
Código PHP:
#include <iostream>
#include <string>

using namespace std;

int main()
{
  
string s "1234321";

  
== string(s.rbegin(), s.rend()) ? cout << "capicua" cout << "no capicua";

  
cin.get();
  return 
0;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita