LES CHAÎNES EN C, LTRIM, RTRIM, REPLACE ET REVERSE

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 25 avril 2004 à 00:10
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 - 24 mai 2008 à 15:14
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/22234-les-chaines-en-c-ltrim-rtrim-replace-et-reverse

Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
24 mai 2008 à 15:14
De mon côté, je suis passé de hpux sous Linux, Windows et Sun.
alors je dois juste éviter les problèmes de portabilité.

Les clients, faut savoir les choisir ;)

Bonne continuation aussi.
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
24 mai 2008 à 14:15
:d

puis bon pour toi etre sous linux correspond a etre communiste ^^
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 mai 2008 à 13:37
eh oui, je reste où sont les clients, faut bien payer les frais et le superflu.
C'est chouette quand il y a un rappel sur ces vieilles sources, un gout de nostalgie.
Bonne continuation.
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
24 mai 2008 à 12:13
4 ans.. ça fait un bail...
Tiens, BruNews, avec le recul (4 ans), la première remarque sur le strcopy était intéressante puisque finalement, j'ai bien fini par ajouté une fonction appender qui renvoit la fin de la chaine. comme quoi.

DWORD... toujours sous windows donc. (size_t serait bien le bienvenue ici, de même qu'un const char*)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 mai 2008 à 09:46
DWORD bnstrlen(char *s)
{
char *c = s;
while(*c) c++;
return (c - s);
}
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
23 mai 2008 à 17:20
strlen(s)
char s[];
{
register i=0;
while(*(++i+s)!=0);
return i;
}

> heuuuuu en lisant le code si ta chaine est egale a "" tu retournes 1
faudrais faire partir i a -1 non ? ou j'ai loupe un episode ?
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
23 mai 2008 à 15:35
Merci pour ce code, Il m'a permit de comprendre certaines choses, cependant, ce que je regrette, c'est en tant que tr?s grande d?butante, je n'ai trouv? aucun commentaire...
Bonne continuation
Bonne prog
sebastienmz Messages postés 139 Date d'inscription mardi 16 mai 2006 Statut Membre Dernière intervention 23 juin 2008
8 nov. 2006 à 17:11
comment marche replace?
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
10 juin 2005 à 00:01
:) No problemo.

Il faut juste savoir ce qu'il t'en coûte d'utiliser telle ou telle méthode. Elles ont toutes des avantages et des inconvénients. Il faut faire des choix.
cs_NeoUmbrella Messages postés 104 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 11 septembre 2008
9 juin 2005 à 23:40
Ha oais ok ^^, j'ai rien dit dans ce cas Hylvenir.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 juin 2005 à 22:44
Ah mais non ce n'est pas dommage, c'est juste qu'en C on le code mais qu'en VB c'est caché dans une virtual machine. VB te ferait un SysAllocString et recopié "test" dedans avant d'y inverser les octets, voila ce que tu n'aurais pas vu mais aurait couté très cher en cycles processeur.
cs_NeoUmbrella Messages postés 104 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 11 septembre 2008
9 juin 2005 à 22:37
Dommage que ca ne marche pas véritablement comme la fonction en vb car on ne peut pas utiliser des constantes style reverse("test")
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
26 avril 2004 à 00:22
oui, surtout pour les passage de parametre, et la regle du int par defaut n'aide pas a la lisibilite si on est pas habituer

qq truc aussi:

register i; = register int i; // int type par defaut

on passe int c au lieu de char c car les char sont promus en int lorsqu'ils sont passer en parametre (de meme pour les short, les float sont promus en double)

pas de const
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
26 avril 2004 à 00:09
y'a pas a dire c'est moche le K&R ;-)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
25 avril 2004 à 23:28
juste pour le fun,

un strlen (length) ecrit dans le style k&r

strlen(s)
char s[];
{
register i=0;
while(*(++i+s)!=0);
return i;
}

un find

find(str,c)
char str[];
int c;
{
register i;
for(i=0; i[str]!=c; i++);
return i;
}

un strcpy

char *strcpy(dest,src)
char dest[];
char src[];
{
register i=0;
while(dest[i++]=src[i]);
return dest;
}

100% compatible c asni
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
25 avril 2004 à 20:50
Si on considére la chaîne C (char*) comme un objet, on peut considérer le strpcy, ou le strcat comme des fonctions membres, (au même titre que l'opérateur = ou += pour les std::string ).
Les concepteurs ont sûrement voulu faire en sorte qu'un utilisateur retrouvre sa chaîne d'origine en sortie afin de pouvoir utiliser cette chaîne. Comme ça "l'objet" chaîne ne varie pas du point de vue de l'utilisateur, on peut ainsi enchaîner des appels constructeurs/modifications sur le même objet chaîne.

Je n'ai jamais mesuré la pénalité du parcours en fin de chaine lors d'un strcat, comparé par exemple à simple formatage d'un entier dans une chaîne (assez fréquent ).
Dans le cas de concaténation successive, la gestion de la taille de la chaîne devrait poser plus de problème que la concaténation. A voir.
Mais pourquoi pas en effet voir ce que cela donne à l'usage d'avoir un retour sur fin de chaîne.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 avril 2004 à 00:10
Salut,

je te soumets une reflexion:
a quoi sert de retourner dans 'copy' par exemple le pointeur qu'on lui fournit , quel interet puisqu'on l'a deja ? Ne serait pas mieux de retourner pointeur sur FIN de copie afin d'eviter d'eventuels strcat. Le benef de performance dans du reporting (exemple) est considerable, les chaines ne sont parcourues qu'une seule fois. C'est pour ma part ce que j'ai toujours reproche a strcpy.
Qu'en penses-tu ?

BruNews
Rejoignez-nous