Bueno estoy haciendo ejercicios, en uno me pedia que aga que la palabra de una linea se vea al revez entonces yo lo hice así:
#include <stdio.h>
main ()
{
int i,c,a;
char c1[50];
i=c=a=0;
for (i=0;i<50 && (c=getchar())!='\n';++i) {
c1[i]=c;
c1[i]='\0';
}
i=0;
while (c1[i]!='\0')
++i;
for (a=i;a>0;--a)
printf ("%c",c1[a]);
return 0;
}
;
Pero a la hora de probarlo y escribo diego, me da vuelta y me sale ogei
cual puede ser el error?.
no gracias, ya encontre la respuesta era el signo > lo tenia que cambiar por >=
jojojo pero eso todavia no di
Cita de: "Gorkin"Y otra sin usar la STL con solo recursividad:
#include <stdio.h>
#include <conio.h>
void alreves (void) {
char c = (char) getchar();
if(c != '\n') {
alreves();
printf("%c", c);
} else {
printf("La cadena al revés es: ");
}
}
int main (void) {
printf("Mete una cadena: ");
alreves();
printf("\n");
}
Curiosa forma de gastar pila a lo chancho!
Además, la recursividad se entiende recién una vez que has entendido la recursividad.
Mi versión:
#include <stdio.h>
main ()
{
int i;
char c; // c es un char si bien getchar devuelve un int no podras poner mas que un char en cadena.
char cadena[50]; // no te cuesta nada utilizar nombres largos que te digan algo de la variable.
for (i=0;i<50 && (c=getchar())!='\n';++i) cadena[i]=c;
// cadena[i]='\0'; // esto no es necesario en este ejemplo pues al salir del bucle i me dice el largo de la cadena y esta no es utlizada como cadena terminada en null sino como un array de chars
while(i--) printf ("%c",cadena[i]);
// se fija si i es 0 y sino lo decrementa, al salir del bucle estabamos un caracter encima del ultimo de la cadena.
return 0;
}
OK, pero mi idea no era ofuscarlo sino escribirlo de manera optima, maximo entendimiento, minima cantidad de codigo, sub-optimo rendimiento.
Asi es como lo escribiria en una rutina mia y la idea era para ayudar a G+10 en su aprendisaje.
Lo que si apunta el #define TAM 100, eso es muy util y yo me lo comi cuando deberia haberlo puesto.
Me hizo acordar a un concurso que hubo hace un tiempo ...
#include <stdio.h>
i,main(){char c[99];for(i=0;i<99&&(c[i]=getchar())!=13;++i);while(i--)putchar(c[i]);return 0;}
STL de gorkin +1
:) Saludos
Todos a usar XOR para dar la vuelta a la cadena leches :p
Cita de: "Vicente"Todos a usar XOR para dar la vuelta a la cadena leches :p
Tuvo que venir el abuelo a contarnos batallitas...
Si somos idiomáticos, que sea hasta el final:
#include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::string s;
std::getline(std::cin, s);
std::string rs(s.rbegin(), s.rend());
std::cout << rs << "\n";
}
std::cout << rs << endl;
:wink:
Cita de: "ZaelSiuS" std::cout << rs << endl;
:wink:
Ha sido totalmente intencionado, porque en este caso utilizar std::endl es más por estética que por funcionalidad (el flush implícito del stream ocurre de todas maneras al finalizar la ejecución del programa). Y aún así, de cometer el abuso y utilizar std::endl, sería necesario incluir <ostream>.
En mi máquina con GCC 4.01 compila sin el <ostream>.. aunque se me olvidó anteponer el std:: a endl. Es más, me compila incluyendo únicamente <iostream>.
#include <iostream>
int main()
{
std::string s;
std::getline(std::cin, s);
std::string rs(s.rbegin(), s.rend());
std::cout << rs << std::endl;
//zOMG! faltaba esto para que no nos suspendiese el profe de Programación I !!!111
return 0;
}
(http://www.thehuntinglife.com/forums/style_emoticons/default/rocker.gif)
Estamos enfermos.
Es que compila en todas las implementaciones existentes en la actualidad de la librería estándar al incluir <iostream>, porque en todas ellas este fichero indirectamente incluye <ostream>. Según el estándar de C++ (17.4.4.1/2), "a C++ header may include other C++ headers". Pero lo ideal es no escribir código que dependa de este aspecto específico de cada implementación (porque si la implementación cambia...), y en este caso, el estándar explicita que std::endl está definido en <ostream>.
El return 0; no es necesario porque es implícito.
(Perdón por la pedantería, pero creo que estos temas son muy interesantes).
Si hacemos las cosas bien:
>>> raw_input()[::-1]
123456789
'987654321'
Eso ha sido un auténtico pythowned (http://i128.photobucket.com/albums/p187/Hol_GER/Pythowned.gif)
@Davur: Tiene sentido lo que dices, tampoco conocía lo del return 0 implícito.
En Scheme:
(reverse-string (read-line))
Ya solo falta lisp y haskell y ponemos la guinda al post
Como se nota que no tenéis visión empresarial: estas cosas las hace el becario, joder! XD
En el lenguaje de programación "Do it by yourself":
Imprime("Por favor, introduce la cadena en orden inverso");
LeeCadena(Cadena);
Imprime(Cadena);
Lalala.
¿De dónde has sacado lo de que sea implícito? (Pura curiosidad)
Cita de: "Mars Attacks"¿De dónde has sacado lo de que sea implícito? (Pura curiosidad)
Del estándar, sección 3.6.1/5:
"A return statement in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling exit with the return value as the argument. If control reaches the end of main without encountering a return statement, the effect is that of executing return 0;".
Estupendo, gracias :)