Soyez le premier à donner votre avis sur cette source.
Snippet vu 11 694 fois - Téléchargée 20 fois
char text[128]=" monmail@darkpoulpo.fr "; // TRIM() de mot simple (toujours utiliser les 2 lignes ensembles) sscanf(text,"%*[ \t]%[^\0]",text); // LTRIM() sscanf(text,"%s",text); // RTRIM() // TRIM() de phrase (toujours utiliser les 3 lignes ensembles) sscanf(text,"%*[ \t]%[^\0]",text); // LTRIM() char *t=strchr(text,'\0'); while (t && strchr(" \t",*(t-1))) (*(--t))='\0'; // LTRIM() sscanf(text,"%*[ \t]%[^\0]",text); // RTRIM() de mot simple sscanf(text,"%s",text); // RTRIM() de phrase, pas de sscanf()! snif!!! char *t=strchr(text,'\0'); while (t && strchr(" \t",*(t-1))) (*(--t))='\0';
13 août 2007 à 13:24
J'ai pris le parti de participer, avec un peu de retard, au concours du "code le plus lent du monde" !
Je précise que je navigue dans un monde parallèle :
- moins j'écris de code, mieux je me porte ;
- l'optimisation se fait au besoin et en dernier lieu ;
- l'arithmétique des pointeurs : ça pique mes yeux...
Voici ma version en c++ standard des fonctions trim(). Attention : à n'utiliser que dans des applications inefficaces !!!
////////////////////////////////////////////////////////////////////////////////
std::string& ltrim( std::string& str )
{
return str.erase( 0 , str.find_first_not_of( "[ \t]" ) );
}
////////////////////////////////////////////////////////////////////////////////
std::string& rtrim( std::string& str )
{
return str.erase( str.find_last_not_of( "[ \t]" ) + 1 , str.size() );
}
////////////////////////////////////////////////////////////////////////////////
std::string& trim( std::string& str )
{
return ltrim( rtrim( str ) );
}
////////////////////////////////////////////////////////////////////////////////
31 juil. 2007 à 10:32
Sinon, pour DarkPoulpo, apparamment un trim est pour toi une action désuète et pas assez significtive pour être optimisée et dont on se fous du temps d'exécution.
Pour moi, au contraire il s'agit d'un opération critique qui doit être la plus optimisée possible car dans 90% des cas ou j'ai à l'utiliser, il s'agit de trimmer des champs de messages entre interfaces de commuunication au sein de systèmes d'information. Et la on doit traiter les infos en temps réel et gérer des centaines de messages par seconde.
Dans tous ls cas, il s'agit d'une routine de base et comme toute les routines de base, il faut de l'optimisation afin de laisser au developpeur le loisir de faire du code métier aussi lent q'il le souhaite.
Sinon, au sujet du C99, je suis d'accord avec Brunews, cela n'apoorte rien de vraiment bon (sauf les macros à arguments variables, c'est plutôt sympa)... En fait la révision 99 a été faite pour gommer un peu les différences entre C et c++ (sur l'ensemble C commun). Et puis Microsoft a clairement indiqué qu'il ne comptait pas du tout supporter cette norme et ne le fera jamais...
30 juil. 2007 à 22:38
Pour conclure, je dirais simplement que je n'ai plus VC++ donc peut pas tester ton exemple.
Par contre avec gcc (4.1.2), ça passe (les deux exemples, celui de BruNews et de SAK). Mais je répète, je ne dis pas que c'est bien. (même pas bien du tout avec l'exemple de BruNews).
Matt...
30 juil. 2007 à 21:42
Pour conclure, je dirais simplement qu'en C, lorsqu'on a la possibilité d'optimiser quelque chose rapidement et facilement (commme un trim), on le fait. Sinon on se retrouve très vite avec un programme aussi lent que s'il avait été fais en .NET.
30 juil. 2007 à 21:26
Doucement, je n'ai pas dit que c'était bien ou que c'était une connerie, j'ai seulement dit que tu pouvais déclarer une variable quand tu en avais besoin, c'est tout.
Personnellement, je met toujours mes variables en début de bloc. Je suis d'accord avec toi BruNews, l'exemple que tu as donnée est parlant, c'est du n'importe quoi...
Matt...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.