Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: t4r0x en 15 Junio 2014, 07:06 am



Título: Como remover espacios en C/C++?
Publicado por: t4r0x en 15 Junio 2014, 07:06 am
Buenas quiero saber si alguien puede decirme como puedo remover espacios en C/C++ pero preservando los espacios que pueden haber entre patron dado por ejemplo:

tengo esta cadena:

"A BCD EF '12 3 45' GHI'67   890' JK      '1' L"

y quiero obtener:
"ABCDEF'12 3 45'GHI'67   890'JK'1'L"

como pueden ver remueve todos los espacios excluyendo los espacios que haya entre ese patron, en este caso serian los apostrofos ( ' ).
normalmente lo hago con remove y erase pero me remueve incluyendo los que hayan entre los apostrofos.


Título: Re: Como remover espacios en C/C++?
Publicado por: daryo en 15 Junio 2014, 18:16 pm
funciona asi: antes de encontrar el apostrofe copia todo excepto los espacios cuando encuentra un apostrofe token cambia a 1 y por tanto copiara todo incluyendo espacios cuando vuelve a encontrar un apostrofe token cambia a cero y de nuevo deja de copiar espacios
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int posicion;
  7.    int token=0;
  8.    int contador=0;
  9.    char cadena[]="A BCD EF '12 3 45' GHI'67   890' JK      '1' L";
  10.    char resultado[2045];
  11.    for(posicion=0;posicion<sizeof(cadena);posicion++)
  12.    {
  13.        if(cadena[posicion]!=' ' && token==0)
  14.        {
  15.        resultado[contador]=cadena[posicion];
  16.        contador++;
  17.        }
  18.  
  19.        if(token==1)
  20.        {
  21.        resultado[contador]=cadena[posicion];
  22.        contador++;
  23.        }
  24.        if(cadena[posicion]=='\'')
  25.        {
  26.         if(token==0)
  27.         {
  28.         token=1;
  29.         }
  30.         else
  31.         {
  32.         token=0;
  33.         }
  34.        }
  35.  
  36.    }
  37.    printf("%s",resultado);
  38.    return 0;
  39. }
  40.  
  41. }


Título: Re: Como remover espacios en C/C++?
Publicado por: leosansan en 15 Junio 2014, 21:37 pm
Con una idea parecida a daryo solo que desplazo los caracteres de la cadena a la izquierda cada vez que encuentro un espacio fuera de los delimitadores:

Código
  1. #include <stdio.h>
  2.  
  3. void eliminar ( char cadena[], int pos ){
  4.  int i;
  5.  for ( i = pos; cadena[i]; i++ )
  6.    cadena[i] = cadena[i+1];
  7. }
  8.  
  9. int main(void){
  10.  int i, flag=0;
  11.  char cadena[] = "A  BCD   EF 9'12  3 45'   G  H  I  '67   890'  J  K  MN   '1'   L  9  ";
  12.  for ( i = 0; cadena[i] ; i++ ){
  13.    if ( cadena[i] == '\'' )
  14.      flag = ( flag ==1 ) ? 0 : 1;
  15.    else if ( flag == 0 && cadena[i] == ' ' )
  16.      eliminar ( cadena, i-- );
  17.  }
  18.  printf ( "\n%s\n", cadena );
  19.  return 0;
  20. }

Y con la misma idea, pero un poco más cpmprimido:

Código
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.  int i, flag=0, j = 0;
  5.  char cadena[] = "A  BCD   EF 9'12  3 45'   G  H  I  '67   890'  J  K  MN   '1'   L  9  ";
  6.  char cadena_final[sizeof(cadena)] = {0};
  7.  for ( i = 0; cadena[i]; i++ ){
  8.    if ( cadena[i] == '\'' )
  9.      flag = ( flag ==1 ) ? 0 : 1;
  10.    if ( (flag == 0 &&  cadena[i] != ' ')  || flag == 1 )
  11.      cadena_final[j++] = cadena[i];
  12.  }
  13.  printf ( "\n%s\n", cadena_final );
  14.  return 0;
  15. }

ˇˇˇˇ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Como remover espacios en C/C++?
Publicado por: daryo en 16 Junio 2014, 01:15 am
excelente leosansan  ;D


Título: Re: Como remover espacios en C/C++?
Publicado por: eferion en 17 Junio 2014, 12:26 pm
Mi propuesta en C:

Código
  1. #include <stdio.h>
  2.  
  3. int main( void )
  4. {
  5.  int i, j;
  6.  int flag = 0;
  7.  char cadena[] = "A  BCD   EF 9'12  3 45'   G  H  I  '67   890'  J  K  MN   '1'   L  9  ";
  8.  char cadena_final[ sizeof( cadena ) ] = {0};
  9.  
  10.  for ( i = 0, j = 0; cadena[i]; i++ )
  11.  {
  12.    flag ^= ( cadena[ i ] == '\'' );
  13.  
  14.    if ( flag  || cadena[ i ] != ' ' )
  15.      cadena_final[ j++ ] = cadena[ i ];
  16.  }
  17.  printf ( "\n%s\n", cadena_final );
  18.  return 0;
  19. }

Mi propuesta en C++:

Código
  1. #include <string>
  2. #include <iostream>
  3.  
  4. int main( )
  5. {
  6.  std::string cadena = "A  BCD   EF 9'12  3 45'   G  H  I  '67   890'  J  K  MN   '1'   L  9  ";
  7.  std::string cadena_final;
  8.  
  9.  bool flag = false;
  10.  for ( auto it = cadena.begin( ); it != cadena.end( ); ++it )
  11.  {
  12.    flag ^= ( *it == '\'' );
  13.  
  14.    if ( flag || *it != ' ' )
  15.      cadena_final += *it;
  16.  }
  17.  
  18.  std::cout << std::endl << cadena_final << std::endl;
  19. }


Título: Re: Como remover espacios en C/C++?
Publicado por: leosansan en 17 Junio 2014, 14:22 pm
Que todo sea por una línea menos  ;) :

Código
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.  int i, k, flag = 0, j = 0;
  5.  char cadena[] = "A  BCD   EF 9'12  3 45'   G  H  I  '67   890'  J  K  MN   '1'   L  9  ";
  6.  char cadena_final[sizeof(cadena)] = {0};
  7.  for ( i = 0; cadena[i]; i++ ){
  8.    flag = ( cadena[i] == '\'' ) ? 1 - flag : 0 + flag;
  9.    if ( ( cadena[i] != ' ')  || flag == 1 )
  10.      cadena_final[j++] = cadena[i];
  11.  }
  12.  printf ( "\n%s\n", cadena_final );
  13.  return 0;
  14. }

ˇˇˇˇ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)