| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
irae
Registrado: 06 May 2011 Mensajes: 3
| Publicado: 06/05/2011 11:12 pm | | | Título: Problema al invertir palabras |
| Hola a todos! Busque en el foro este problema pero no lo encontre (resuelto) , ojala me puedan ayudar =p Quiero invertir las palabras de cada frase Ej: Hola mundo , me debe dar , aloH odnum , pero hasta el momento se me invierte la frase completa ( odnum aloh), ojala me puedan ayudar ahi va mi codigo , gracias .
| Código: |
#include <stdio.h> // #define MAX 100 int main() { int i,j,a; char aux,cadena[MAX]; fgets(cadena, MAX, stdin); for(i=0;cadena[i];i++); { for(a=i-1,j=0;j<i/2;j++,a--){ aux=cadena[a]; cadena[a]=cadena[j]; cadena[j]=aux; } } printf("%s\n", cadena); return 0; }
|
|
|
| Volver arriba | |
 |
cheroky
Registrado: 22 Sep 2005 Mensajes: 2558 Ubicación: Valladolid (España)
| Publicado: 07/05/2011 3:40 am | | | Título: |
| Hola.
Una variante del ejercicio utilizando punteros, por sencillez solo imprime.
| Código: | #include <stdio.h>
#define STR "Hola mundo cruel"
int main(void) { char* p, * r; for(p = STR; *p != '\0'; p++) if( p[1] == ' '|| p[1] == '\0' ) { for(r = p; r >= STR && *r != ' '; --r) putchar( *r ); putchar(' '); }
return 0; } |
Salida:
·?0ƒ· _________________ La cuestión no es si hay vida inteligente en otros planetas lejanos. La cuestión es si hay vida inteligente aquí. |
|
| Volver arriba | |
 |
Pantalàimon_
Registrado: 17 Jul 2007 Mensajes: 1345
| Publicado: 07/05/2011 4:56 am | | | Título: |
| Aquí una solución usando recursividad.
| Código: | #include<stdio.h>
int print_inv( const char* str, int pos, char* tkns ) { int i = 0; while( tkns[i] != '\0' && str[pos] != tkns[i] ) ++i;
if( tkns[i] == '\0' && str[pos] != '\0' ) { int r = print_inv( str, pos + 1, tkns ); putchar( str[pos] ); return r; } else return pos; }
int main(void) { int i = -1; char cad[] = "Toda regla tiene su excepcion, incluso esta.";
do { i = print_inv( cad, ++i, " ,." ); putchar( cad[i] ); } while( cad[i] != '\0' ); putchar('\n');
return 0; } |
Ultima edición por Pantalàimon_ el 07/05/2011 6:53 am; editado 1 vez |
|
| Volver arriba | |
 |
|
cheroky
Registrado: 22 Sep 2005 Mensajes: 2558 Ubicación: Valladolid (España)
| Publicado: 07/05/2011 5:23 am | | | Título: |
| Hola.
No lo he revisado con detenimiento pero si le pasas una cadena de un solo carácter o una iniciada en un espacio como " abc" imprime basura desbordando el array.
·?0ƒ· _________________ La cuestión no es si hay vida inteligente en otros planetas lejanos. La cuestión es si hay vida inteligente aquí. |
|
| Volver arriba | |
 |
Pantalàimon_
Registrado: 17 Jul 2007 Mensajes: 1345
| Publicado: 07/05/2011 6:51 am | | | Título: |
| | Gracias, lo edito. |
|
| Volver arriba | |
 |
cheroky
Registrado: 22 Sep 2005 Mensajes: 2558 Ubicación: Valladolid (España)
| Publicado: 07/05/2011 7:40 am | | | Título: |
| Hola.
Lo he retocado un poco para que asimile los signos de puntuación más básicos.
| Código: | #include <stdio.h>
#define STR "La semisuma es (a+b)/2, por tanto..."
#define CTP(A) ((A) < '0')
int main(void) { char* p, * r; for(p = STR; *p; p++) { if(CTP(p[1])) for(r = p; r >= STR && !CTP(*r); --r) putchar(*r); if(CTP(*p)) putchar(*p); } return 0; } |
·?0ƒ· _________________ La cuestión no es si hay vida inteligente en otros planetas lejanos. La cuestión es si hay vida inteligente aquí. |
|
| Volver arriba | |
 |
|
eduar2083
Registrado: 10 Ago 2008 Mensajes: 219 Ubicación: Lima - Perú
| Publicado: 07/05/2011 1:50 pm | | | Título: |
| A mi se me ocurrió esto, está un poco extenso pero funciona bien.
| Código: | #include <stdio.h> #include <ctype.h>
char *invertir_palabras( char *s );
int main( void ) { char cad[80];
printf( ": " ); gets( cad ); printf( ": %s", invertir_palabras( cad ) );
return 0; }
char *invertir_palabras( char *s ) { int i, j, inf; char c;
for ( i = 0; s[i]; ) {
/* Encontrar el primer caracter de la palabra */ for ( ; isspace( s[i] ); ++i );
/* Guardar el índice del primer caracter de la palabra */ inf = i;
/* Calcular longitud de la palabra */ for ( ; !isspace( s[i] ) && s[i]; ++i );
/* Invertir la palabra */ for ( j = i - 1; inf < j; ++inf, --j ) { c = s[j]; s[j] = s[inf]; s[inf] = c; } }
return s; }
|
Saludos. |
|
| Volver arriba | |
 |
|
|