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 #include <stdio.h> #include <stdlib.h> int main() { int posicion; int token=0; int contador=0; char cadena[]="A BCD EF '12 3 45' GHI'67 890' JK '1' L"; char resultado[2045]; for(posicion=0;posicion<sizeof(cadena);posicion++) { if(cadena[posicion]!=' ' && token==0) { resultado[contador]=cadena[posicion]; contador++; } if(token==1) { resultado[contador]=cadena[posicion]; contador++; } if(cadena[posicion]=='\'') { if(token==0) { token=1; } else { token=0; } } } return 0; } }
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: #include <stdio.h> void eliminar ( char cadena[], int pos ){ int i; for ( i = pos; cadena[i]; i++ ) cadena[i] = cadena[i+1]; } int main(void){ int i, flag=0; char cadena[] = "A BCD EF 9'12 3 45' G H I '67 890' J K MN '1' L 9 "; for ( i = 0; cadena[i] ; i++ ){ if ( cadena[i] == '\'' ) flag = ( flag ==1 ) ? 0 : 1; else if ( flag == 0 && cadena[i] == ' ' ) eliminar ( cadena, i-- ); } printf ( "\n%s\n", cadena ); return 0; }
Y con la misma idea, pero un poco más cpmprimido: #include <stdio.h> int main(void){ int i, flag=0, j = 0; char cadena[] = "A BCD EF 9'12 3 45' G H I '67 890' J K MN '1' L 9 "; char cadena_final[sizeof(cadena)] = {0}; for ( i = 0; cadena[i]; i++ ){ if ( cadena[i] == '\'' ) flag = ( flag ==1 ) ? 0 : 1; if ( (flag == 0 && cadena[i] != ' ') || flag == 1 ) cadena_final[j++] = cadena[i]; } printf ( "\n%s\n", cadena_final ); return 0; }
ˇˇˇˇ 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: #include <stdio.h> int main( void ) { int i, j; int flag = 0; char cadena[] = "A BCD EF 9'12 3 45' G H I '67 890' J K MN '1' L 9 "; char cadena_final[ sizeof( cadena ) ] = {0}; for ( i = 0, j = 0; cadena[i]; i++ ) { flag ^= ( cadena[ i ] == '\'' ); if ( flag || cadena[ i ] != ' ' ) cadena_final[ j++ ] = cadena[ i ]; } printf ( "\n%s\n", cadena_final ); return 0; }
Mi propuesta en C++: #include <string> #include <iostream> int main( ) { std::string cadena = "A BCD EF 9'12 3 45' G H I '67 890' J K MN '1' L 9 "; std::string cadena_final; bool flag = false; for ( auto it = cadena.begin( ); it != cadena.end( ); ++it ) { flag ^= ( *it == '\'' ); if ( flag || *it != ' ' ) cadena_final += *it; } std::cout << std::endl << cadena_final << std::endl; }
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 ;) : #include <stdio.h> int main(void){ int i, k, flag = 0, j = 0; char cadena[] = "A BCD EF 9'12 3 45' G H I '67 890' J K MN '1' L 9 "; char cadena_final[sizeof(cadena)] = {0}; for ( i = 0; cadena[i]; i++ ){ flag = ( cadena[i] == '\'' ) ? 1 - flag : 0 + flag; if ( ( cadena[i] != ' ') || flag == 1 ) cadena_final[j++] = cadena[i]; } printf ( "\n%s\n", cadena_final ); return 0; }
ˇˇˇˇ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
|