elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como remover espacios en C/C++?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como remover espacios en C/C++?  (Leído 3,707 veces)
t4r0x

Desconectado Desconectado

Mensajes: 92



Ver Perfil
Como remover espacios en C/C++?
« 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.


En línea

daryo


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: Como remover espacios en C/C++?
« Respuesta #1 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. }


« Última modificación: 15 Junio 2014, 18:17 pm por daryo » En línea

buenas
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Como remover espacios en C/C++?
« Respuesta #2 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! ..... !!!!


« Última modificación: 15 Junio 2014, 22:36 pm por leosansan » En línea

daryo


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: Como remover espacios en C/C++?
« Respuesta #3 en: 16 Junio 2014, 01:15 am »

excelente leosansan  ;D
En línea

buenas
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Como remover espacios en C/C++?
« Respuesta #4 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. }
« Última modificación: 17 Junio 2014, 12:42 pm por eferion » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Como remover espacios en C/C++?
« Respuesta #5 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! ..... !!!!


« Última modificación: 17 Junio 2014, 14:30 pm por leosansan » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Guarda cadenas con espacios - como? « 1 2 »
Programación C/C++
d00ze13 10 22,415 Último mensaje 19 Mayo 2011, 09:02 am
por d00ze13
como adicionar espacios en una cadena de texto?
Programación Visual Basic
byway 8 4,903 Último mensaje 17 Noviembre 2011, 22:59 pm
por x64core
como remover totalmente msn y internet explore?
Windows
portaro 3 2,540 Último mensaje 23 Diciembre 2011, 19:04 pm
por dato000
¿Cómo validar espacios vacíos en C++?
Programación C/C++
Juancho25 6 20,252 Último mensaje 6 Mayo 2013, 15:14 pm
por rir3760
¿Cómo remover el .html en una url?
Desarrollo Web
ElAlien725 4 2,327 Último mensaje 12 Febrero 2019, 03:13 am
por ElAlien725
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines