suprimir espacios

Iniciado por ALONSOQ, 11 Julio 2012, 21:51 PM

0 Miembros y 1 Visitante están viendo este tema.

ALONSOQ

[code][code]Hola,
Tengo hecho este programa para suprimir espacios en blanco, y funciona correctamente; sin embargo tengo una duda:

Por que si en lugar de utilizar una única cadena:
for( i=0;texto[i]!='\0';i++ )
    {
         if( texto[i] == ' ' )/* si hay un espacio*/
         {
             for( j = i+1 ; texto[j] !='\0' ; j++ )
             {
                  texto[j-1] = texto[j];
             }
           texto[j-1] = '\0';
         }
         
    }
   
          printf( "Sin espacios : %s\n" ,texto );
     
     system( "pause" );
[/code]

utilizo dos cadenas y una la vuelvo en otra mediante strcpy;

for( i = 0 ; texto[i] != '\0' ; i++ )
    {
         if( texto[i] == ' ' )/* si hay un espacio*/
         {
             for( j = i+1 ; palabra[j] != '\0' ; j++ )
             {
                  palabra[j-1] = palabra[j];
             }
             palabra[j-1] = '\0';
         
         }
         
    }
   
 
          printf( "Sin espacios : %s\n" , palabra )
;[/code]
      al meter por ejemplo la frase hola mundo feliz, no funciona en el segundo caso?

muchas gracias

DickGumshoe

¡Hola!

No funciona bien porque lías las variables. Pones:

if( texto[i] == ' ' )/* si hay un espacio*/

Sin embargo, en el bucle for de después los espacios se los quitas a palabra, no a texto , por tanto la modificación se hará cuando encuentre un espacio en la cadena original, y no en la que estás editando, y te dará mal. Quedaría así:

for( i = 0 ; texto[i] != '\0' ; i++ )
    {
         if( palabra[i] == ' ' )/* si hay un espacio*/
         {
             for( j = i+1 ; palabra[j] != '\0' ; j++ )
             {
                  palabra[j-1] = palabra[j];

             }
       palabra[j-1] = '\0';
         }

    }


Saludos!

ALONSOQ

Muchísimas gracias, una respuesta clarísima

saludos