char *strip(char *s){for(;s[0]==' ';s=&s[1]);s=strdup(s);int l=strlen(s)-1;while(s[l]==' ')s[l--]='\0';return s;}
Actualización: @varogb7 aporta unha versión máis eficiente, que só recorre unha vez a cadea (a diferencia das dúas que o fai o anterior), tedes o código aquí a continuación. Moitas grazas polo apoio! ;)
void strip(char *target, const char *source){ int i=0, desfase = 0; *target='\0'; for(i=0; source[i] == ' ' ; i++) desfase++; int ultimoCaracterDistintoDeEspacio = 0; for( ; source[i]!='\0' ; i++ ){ target[i-desfase] = source[i]; if(source[i]!=' ') ultimoCaracterDistintoDeEspacio = i; } if( i-desfase == 0 ) target[ultimoCaracterDistintoDeEspacio-desfase]='\0'; else target[ultimoCaracterDistintoDeEspacio-desfase+1]='\0'; }
Un exemplo de uso:
#include <stdlib.h> void strip(char *target, const char *source){ int i=0, desfase = 0; *target='\0'; for(i=0; source[i] == ' ' ; i++) desfase++; int ultimoCaracterDistintoDeEspacio = 0; for( ; source[i]!='\0' ; i++ ){ target[i-desfase] = source[i]; if(source[i]!=' ') ultimoCaracterDistintoDeEspacio = i; } if( i-desfase == 0 ) target[ultimoCaracterDistintoDeEspacio-desfase]='\0'; else target[ultimoCaracterDistintoDeEspacio-desfase+1]='\0'; } void main(){ char *str = " Esta é unha proba "; char stripped[30]; strip( stripped , str); printf("'%s' -> '%s'\n", str, stripped); getchar(); }
Voltando o twitcode, imos por partes, así quedaría adecuadamente separada:
char *strip(char *s){ // Busca o primeiro caracter da cadea diferente de ' ' for(;s[0] == ' '; s = &s[1]); // Fai unha copia da cadea s = strdup(s); // Determina o último caracter para comprobar int l = strlen(s) - 1; // Mentres que o último sexa un espazo while(s[l] == ' ') // Eliminalo s[l--]='\0'; return s; }
Por exemplo:
#include <string.h> #include <stdlib.h> char *strip(char *s){for(;s[0]==' ';s=&s[1]);s=strdup(s);int l=strlen(s)-1;while(s[l]==' ')s[l--]='\0';return s;} char *string = " Esta é unha proba "; int main(){ char *stripped = strip(string); printf("'%s' -> '%s'\n", string, stripped); // Pra mante-la memoria limpa :P free(stripped); return 0; }
Saída:
' Esta é unha proba ' -> 'Esta é unha proba'
Espero que vos gustara, e algo que nalguns casos pode resultar útil, inda que non comprimido :)
No hay comentarios:
Publicar un comentario