/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema al invertir palabras

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
irae



Registrado: 06 May 2011
Mensajes: 3

MensajePublicado: 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)

MensajePublicado: 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:
Código:
aloH odnum leurc


·?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

MensajePublicado: 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)

MensajePublicado: 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

MensajePublicado: 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)

MensajePublicado: 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ú

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com