DUPLICATES possibles: strong>
moyen indolore de couper le meneur / Espace de traînée en C? A >
couper une chaîne en C P>J'écris la méthode de garniture à cordes en C et c'est le code que j'ai proposé. Je pense que le travail d'élimination des espaces de tête et de fuite des espaces de fin, je souhaite que le code puisse être plus propre. Pouvez-vous suggérer des améliorations? P>
xxx pré> Ce code a-t-il l'air propre ?? p> blockquote>
7 Réponses :
Cela n'a pas l'air propre. En supposant que le premier caractère est un espace, vous utilisez Vous ne terminez pas non plus la chaîne. En supposant que vous corrigeez le problème d'inaidification Le code effondra également plusieurs espaces à l'intérieur de la chaîne. Ce n'est pas ce que vous avez décrit; est-ce le comportement souhaité? p> lastc code> avec une valeur non définie. Vous quittez un espace à la fin (s'il y a un espace à la fin, quand il est touché
C code> sera un espace et
dernierc code> ne sera pas). P >
DIADC code>, vous transformerez "ABC" en "ABCBC", car il n'est pas raccourci à aucun moment. P>
Il y a plusieurs problèmes avec ce code. Il ne vérifie que l'espace. Pas des onglets ou des lignes neuves. Vous copiez toute la partie blanche de la chaîne. Et vous utilisez LastC avant de la définir.
Voici une version alternative (compilée mais non testée): p>
Au lieu de comparer un caractère avec le caractère d'espace '', j'utiliserais la fonction "Isspace", que je crois est définie dans ctype.h. P>
Je ne sais pas de propreté, mais je trouve difficile de suivre. Si j'avais besoin de faire cela, j'y réfléchisais d'abord en deux phases: p>
Je pourrais alors regarder de plus près une solution d'un laissez-passer comme si vous semblez essayer de mettre en œuvre, mais seulement s'il y avait un problème de vitesse. P>
D'ailleurs, vous voulez probablement utiliser Isspace () code> plutôt que de vérifier uniquement pour l'espace. P>
Il y a des problèmes: Voici une solution utilisant des pointeurs que j'ai écrites il y a tout à fait: p> dernierc code> pourrait être utilisé non initialisé. Et vous pouvez utiliser A pour boucle au lieu d'une boucle de temps, par exemple. De plus, les fonctions de garniture / bande remplacent généralement des espaces, des onglets et de nouvelles lignes.
void trim(char *str)
{
char *ptr = str;
while(*ptr == ' ' || *ptr == '\t' || *ptr == '\r' || *ptr == '\n') ++ptr;
char *end = ptr;
while(*end) ++end;
if(end > ptr)
{
for(--end; end >= ptr && (*end == ' ' || *end == '\t' || *end == '\r' || *end == '\n'); --end);
}
memmove(str, ptr, end-ptr);
str[end-ptr] = 0;
}
Voici ma solution.
court, simple, propre, commenté et légèrement testé. p>
Il utilise la fonction de classification "ISSPACE", vous permet de modifier facilement votre définition de "espace blanc "Pour être coupé. p>
Cela pourrait être dangereux lorsque Strlen (String) est 0.
Il y a plus à l'espace blanc que le caractère spatial
Il rend souvent votre code plus lisible si vous utilisez une utilisation judicieuse des fonctions de la bibliothèque standard - par exemple, Isspace () code> et
Memmove () code> sont particulièrement utiles ici:
Ai-je votre permission d'utiliser cela dans un logiciel commercial?
Eh bien, il ne vérifie que le caractère espace i>. L'espace blanc consiste généralement à vérifier l'onglet, le retour de chariot et l'alimentation en ligne
Stackoverflow.com/ Questions / 122616 / ...
Publié une réponse ici: Stackoverflow.com/ Questions / 656542 / Trim-A-String-in-C / ...
sinon si (lastc! = '') code> Quand
lastc code> n'est jamais asigné. Envisagez de poster à codereview.stackexchange.com