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