LES CHAÎNES EN C, LTRIM, RTRIM, REPLACE ET REVERSE
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
25 avril 2004 à 00:10
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDerniè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.
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 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és2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 24 mai 2008 à 14:15
:d
puis bon pour toi etre sous linux correspond a etre communiste ^^
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 24 mai 2008 à 09:46
> 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és1229Date d'inscriptionvendredi 16 novembre 2007StatutMembreDernière intervention16 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és139Date d'inscriptionmardi 16 mai 2006StatutMembreDernière intervention23 juin 2008 8 nov. 2006 à 17:11
comment marche replace?
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 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és104Date d'inscriptionvendredi 5 novembre 2004StatutMembreDernière intervention11 septembre 2008 9 juin 2005 à 23:40
Ha oais ok ^^, j'ai rien dit dans ce cas Hylvenir.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és104Date d'inscriptionvendredi 5 novembre 2004StatutMembreDernière intervention11 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és3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 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és364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 26 avril 2004 à 00:09
y'a pas a dire c'est moche le K&R ;-)
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 25 avril 2004 à 23:28
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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 ?
24 mai 2008 à 15:14
alors je dois juste éviter les problèmes de portabilité.
Les clients, faut savoir les choisir ;)
Bonne continuation aussi.
24 mai 2008 à 14:15
puis bon pour toi etre sous linux correspond a etre communiste ^^
24 mai 2008 à 13:37
C'est chouette quand il y a un rappel sur ces vieilles sources, un gout de nostalgie.
Bonne continuation.
24 mai 2008 à 12:13
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*)
24 mai 2008 à 09:46
{
char *c = s;
while(*c) c++;
return (c - s);
}
23 mai 2008 à 17:20
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 ?
23 mai 2008 à 15:35
Bonne continuation
Bonne prog
8 nov. 2006 à 17:11
10 juin 2005 à 00:01
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.
9 juin 2005 à 23:40
9 juin 2005 à 22:44
9 juin 2005 à 22:37
26 avril 2004 à 00:22
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
26 avril 2004 à 00:09
25 avril 2004 à 23:28
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
25 avril 2004 à 20:50
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.
25 avril 2004 à 00:10
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