Sscanf pour supprimer des espaces (comme trim())

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 457 fois - Téléchargée 19 fois

Contenu du snippet

trim() ne marche pas avec les phrases

lrim() fonctionne avec phrase et mot

rtrim() avec sscanf() ne fonctionne pas avec les pharses

rtrim() pour les phrases a base de strchr()

Source / Exemple :


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';

A voir également

Ajouter un commentaire Commentaires
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Bonjour,

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 ) );
}
////////////////////////////////////////////////////////////////////////////////
Messages postés
178
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
25 août 2010
1
Ca c'est un post comme on les aime... ! Que d'action !

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...
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonsoir,

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...
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
T'as essayé de compiler mon exemple ? Moi ça me donne une erreur comme quoi toto n'est pas déclaré.

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.
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonsoir,

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...
Afficher les 22 commentaires

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.