Decoupage de chaine ! [c/c++] - C++ - Programmation
Marsh Posté le 12-04-2003 à 23:22:44
oui ca existe, la methode s'apelle strtok de la classe CString
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
EDIT : sinon je crois qu'il y a aussi, midd, left et right dans CString
Marsh Posté le 12-04-2003 à 23:26:20
qu'est ce que tu nou vends tes Cstring
Marsh Posté le 12-04-2003 à 23:30:55
un truc genre:
strncpy(gauche, ligne, 8);
strncpy(milieu, &ligne[strlen(ligne)/2-4], 8);
strncpy(droite, &ligne[strlen(ligne)-8], 8);
PS: t'as intérêt à déclarer tes char en [9] plutôt que [8], il faut la place du 0 de fin
Marsh Posté le 12-04-2003 à 23:31:56
++Taz a écrit : qu'est ce que tu nou vends tes Cstring |
bah si il est en MFC il peut le faire avec des CString
Marsh Posté le 12-04-2003 à 23:35:17
antp a écrit : un truc genre: |
presque antp, je note tes efforts. utiliser sizeof quand c'est possible c'est mieux
char gauche[8];
strncpy(gauche, ligne, sizeof gauche);
Marsh Posté le 12-04-2003 à 23:37:45
ReplyMarsh Posté le 12-04-2003 à 23:38:21
++Taz a écrit : presque antp, je note tes efforts. utiliser sizeof quand c'est possible c'est mieux |
ouais évidemment, je fais tj un sizeof ou une constante/define pour ce genre de chose
j'ai fait ça vite fait
Marsh Posté le 13-04-2003 à 00:17:56
++Taz a écrit : presque antp, je note tes efforts. utiliser sizeof quand c'est possible c'est mieux |
bof le sizeof... la norme dit que sizeof(char) == 1 tout le temps. Autant mettre la constante directement.
Marsh Posté le 13-04-2003 à 00:24:40
mais ici c'est 8, on parle de la taille d'un tableau, pas d'un char !
Marsh Posté le 13-04-2003 à 06:37:49
Moi je préfère sizeof( gauche ) / sizeof( gauche[0] ).
Ca evite les mauvaises surprises quand on modifie le code pour passer d'une ansi string vers une unicode.
Comme ca fait long a ecrire, je prefere moi aussi utiliser une constante / define (initialisee ainsi).
Marsh Posté le 13-04-2003 à 13:01:55
autre petite question y a t il une commande pour chercher un caractere ou un ghroupe de caractere dans une variable char ?
style g une phrase "salut les gar comment ca va ?"
et je voudrais savoir a combien de caractere se trouve le g de gar (10 ou 11)
Marsh Posté le 13-04-2003 à 13:05:38
ReplyMarsh Posté le 13-04-2003 à 16:01:47
attention a ces fonctions, la plupart sont pas réentrantes.
Marsh Posté le 13-04-2003 à 16:05:41
++Taz a écrit : éternel rappel: |
vois pas le rapport
au lieu de faire un
Code :
|
avec un
Code :
|
par exemple, c'est plus rapide de faire un :
Code :
|
et un
Code :
|
a la place du
Code :
|
Marsh Posté le 13-04-2003 à 19:49:08
je faisais un rappel niveau parenthésases. et ce n'est pas une question de "plus rapide". TAILLE c'est bien, ça s'adapte si le nombre d'élémnts change (j'aurais préféré une varaible const, ) mais sizeof s'adapate aussi au changement de données.
Marsh Posté le 13-04-2003 à 20:29:03
++Taz a écrit : je faisais un rappel niveau parenthésases. et ce n'est pas une question de "plus rapide". TAILLE c'est bien, ça s'adapte si le nombre d'élémnts change (j'aurais préféré une varaible const, ) mais sizeof s'adapate aussi au changement de données. |
j'imagine que sizeof il effectue une opération au minimum non ? Alors que si on met un #define, y'a aucune opération, puisque c'est effectué au moment du preprocess...
me trompe-je ?
Marsh Posté le 13-04-2003 à 20:35:17
non, sizeo fne fait rien de plus, le compilateur est capable de régler au moment de la compilation. je te plains de toutes façons si tu en es à compter tes cycles de cpu
Marsh Posté le 14-04-2003 à 00:05:21
++Taz a écrit : non, sizeo fne fait rien de plus, le compilateur est capable de régler au moment de la compilation. je te plains de toutes façons si tu en es à compter tes cycles de cpu |
je disais ca comme ca
Marsh Posté le 14-04-2003 à 00:16:30
ToxicAvenger a écrit : |
completement, il me parait évident que "tout le bouleau de sizeof" est fait à la compil une fois pour toutes.
Marsh Posté le 14-04-2003 à 15:14:16
Moi il me parait evident que tout programmeur digne de ce nom devrait s'être fait une classe String depuis longtemps.
Dans le cas d'une bonne programmation, on n'utilise plus depuis longtemps une zone de mémoire de longueur fixe mais au contraire un système qui peut etendre au besoin la taille d'une String.
Dans ce cas, on n'utilise pas sizeof pour connaitre la taille totale de la string mais plutot une variable unsigned long qui la stocke.
Ps : Il n'est pas vrai qu'on peut se moquer de ce qui prends du temps d'execution ou pas.
Ps2 : Le sizeof ne prends pas de temps machine parce que si la valeur est connue comme une constante a la compilation, le sizeof sera remplacé logiquement par une constante.
Marsh Posté le 14-04-2003 à 15:30:31
Sr16 a écrit : Moi il me parait evident que tout programmeur digne de ce nom devrait s'être fait une classe String depuis longtemps. |
j'emploie string (STL) ou AnsiString/WideString (Borland), pourquoi je devrais me faire une classe ?
Marsh Posté le 14-04-2003 à 15:31:20
moi il me parait evident et vecu que dans le monde reel ca se passe pas du tout comme ca, que manipuler les char* ou (berk) les CString ca continue a se faire tous les jours, et que au mieux (enfin mieux c'est vite dit) tu utiliseras ce qui est defini comme etant la norme dans la societe dans laquelle tu travailles
et si tu reflechis un tout petit peu a la maniere dont devra se passer la maintenance du code, c'est evident que chaque developpeur va pas se pointer avec sa propre bibliotheque de fonctions, que ce soit pour les manipulations de chaines ou autre
Marsh Posté le 14-04-2003 à 15:48:45
philou_a7 a écrit : moi il me parait evident et vecu que dans le monde reel ca se passe pas du tout comme ca, que manipuler les char* ou (berk) les CString ca continue a se faire tous les jours, et que au mieux (enfin mieux c'est vite dit) tu utiliseras ce qui est defini comme etant la norme dans la societe dans laquelle tu travailles |
il a pas tort le philou
Marsh Posté le 14-04-2003 à 18:49:25
philou_a7 a écrit : moi il me parait evident et vecu que dans le monde reel ca se passe pas du tout comme ca, que manipuler les char* ou (berk) les CString ca continue a se faire tous les jours, et que au mieux (enfin mieux c'est vite dit) tu utiliseras ce qui est defini comme etant la norme dans la societe dans laquelle tu travailles |
Ca fait 20 ans que je programme. Il m'arrive d'utiliser tout et n'importe quoi y compris les char *, CString, C-Builder, Access ou autres saletés dont la descence me retient de les nommer.
La raison pour laquelle tout programmeur devrait utiliser une classe String n'est pas forcément de l'utiliser tout le temps mais plutot de bien apprendre et comprendre comment ça marche.
Personellement il est vrai que j'ai la "chance" de développer la plupart du temps avec mes classes. Et ca n'est pas une si mauvaise idée que ça d'en avoir développé. Au moins quand ça déconne je sait que je peut trouver une soluce.
C'est bien gentil d'avoir des programmeurs qui n'ont jamais rien développé et se servent toujours de trucs dont ils ne comprennent pas le fonctionnement.
Bien sûr il est clair que dans une equipe de 20 programmeurs on ne peut pas utiliser les toolkits des 20 mecs simultanément sinon bonjour l'angoisse. Mais au moins que ces 20 mecs en aient déja développé une fera qu'ils sauront se tirer d'affaire voir apporter des idées pour améliorer ce dont se sert l'entreprise.
Je n'ai jamais vu de bon programmeur qui n'avait pas développé la sienne.
C'est pas parce qu'on t'impose de la merde qu'il faut ne raisonner que par ça.
C'est pour ça que je propose a notre cher CtHuLhU50 de réaliser sa classe String personelle de maniere a bien apprendre et comprendre comment se font les manips.
Une fois que tu aura fait cela, tu ira comparer son fonctionnement avec d'autres classes String faites par d'autres pour enrichir ta formation.
Marsh Posté le 14-04-2003 à 18:58:02
Sr16 a écrit : |
moi j'ai fait une classe BigInteger, ça compte ? (gros entiers stockés dans des chaînes dynamiques)
Puis c'est un peu réducteur ta théorie là...
(edit: puis je m'en fous, je programme pas en C/C++ )
Marsh Posté le 14-04-2003 à 20:01:38
antp a écrit : |
J'explique ce qu'il faut faire pour bien maitriser le sujet, c'est tout.
Maintenant loin de moi l'idée de faire des jugements de valeur. Se sent programmeur qui veut : Je suis contre tout esprit de caste ou rite d'entrée. Si tu en as pas besoin pour vivre, tant mieux.
Ce que j'explique, c'est ce que je pense bien comme exo pour maitriser réellement les choses.
Je pense juste que c'est une très mauvaise chose que de se servir de classes de base sans jamais en avoir construite. C'est bien sur un avis perso, mais a la lumière du temps il apparait comme vrai. Même si tu ne te servira pas forcément des tiennes en entreprise, ça t'aidera forcément a comprendre et a mieux utiliser celles que tu utilisera.
Pour info, tu programme en quoi ?
Marsh Posté le 14-04-2003 à 20:30:22
Delphi, au boulot et à la maison
mais il m'arrive de parfois programmer en C++ au boulot, mais vu que c'est avec C++Builder j'utilise les objets qui imitent ceux de Delphi.
Comme en Delphi les chaînes ne sont pas traitées comme une classe mais comme un type de base, je n'ai jamais éprouvé le besoin de faire une classe pour leur gestion (même si en interne les chaînes de Delphi sont gérées comme les classes string/CString, càd dynamiques avec un compteur pour la longueur, y a aussi un compteur de références pour un garbage collector je pense).
Il m'arrive par contre souvent d'aller voir dans le code des classes de Borland pour voir comment ça marche en interne (vu que le code source de toutes les librairies est fourni)
Marsh Posté le 14-04-2003 à 23:09:56
antp a écrit : Delphi, au boulot et à la maison |
La tu est dans un cas d'utilisation particulier : Le système de borland n'est pas réellement a 100% du C++ ANSI c'est un environnement propriétaire.
La programmation, c'est un peu comme ça que j'ai appris aussi : Tu programme au départ dans un environnement propriétaire. Tu t'y sent bien, tu as des repères.
Et puis un beau jour cet environnement disparait ou tu est obligé de passer a une machine ou un système qui n'en dispose pas.
Ce jour la tu retrouvera un autre environnement, mais un certain nombre de choses seront moins bien ou pas adaptées a ton style de programmation.
C'est la raison pour laquelle je n'aime pas trop ces environnements et je préfère le pure C++ qui pour moi est la garantie que tout ce que je programme aujourd'huis poura encore être réutilisé dans 15 ans.
Si tu as ecrit ton programme en pure C++ avec une bonne couche de classes d'abstraction par rapport au système, ton programme pourra être adapté a tous les systèmes de la terre. Pas besoin du consentement de Borland.
Une autre raison qui peut vous paraitre bête mais qui conditionne pour beaucoup ce que vous saurez faire en informatique : Depuis le processeur jusqu'a l'algorithme final de votre programme, il y a un empilement de couches en constant augmentation.
Personellement, j'ai suivi l'evolution depuis le temps ou il n'y avait pas d'OS et qu'on programmait tout en assembleur jusqu'a aujourd'huis ou on rajoute couche sur couche sur couche.
Les jeunes programmeurs ne savent pas se qui se met en oeuvre quand ils ecrivent avec un objet de haut niveau, ni ce que ça implique, ce qui conduit malheureusement a écrire n'importe quoi.
C'est pour ça qu'il est réellement important d'entreprendre dans le temps de comprendre ce avec quoi on ecrit. Et le mieux pour ça, c'est de réécrire des parties parce que c'est le seul moyen de savoir pourquoi les choses sont écrites de telle ou telle façon.
Bien sûr, tout cela se fait dans le temps et suivant les besoins.
Je comprends parfaitement que certains langages puissent offrire des facilités et une bonne gestion de la classe String en natif.
C'est donc un bon exercice de refaire une bonne classe String en C++.
Et petit a petit tu te montera des classes. Les meilleurs programmeurs que je connais ont tous des toolkit completes. Et c'est indispensable car TA toolkit est la SEULE qui dispose de la capacité de pouvoir être adaptée a TOUT. Meme si tu programmera souvent avec d'autres choses.
Je finirais en disant que la toolkit borland n'est pas optimale sur le plan de l'architecture : Trop de choses déclarées en global. C'est pas très bon.
Marsh Posté le 14-04-2003 à 23:28:47
Sr16 a écrit : |
bah de temps en temps je fais des classes, mais bon je programme pas tant que ça en fin de compte, par rapport à bcp d'autres ici
Sr16 a écrit : |
comment ça y a quoi de global ? (par défaut il fout les forms et en global et les composants visuels qui sont dessus en public, mais bon suffit de le faire proprement en virant ce genre de chose ou en ne les utilisant pas)
Marsh Posté le 14-04-2003 à 23:30:06
Sr16 a écrit : |
je fais en général gaffe à ce qui se cache derrière les encapsulations des classes genre les trucs de Borland
Marsh Posté le 15-04-2003 à 12:55:02
antp a écrit : |
Profites en de temps en temps pour te construire des classes de base. Car le principe de base d'une programmation efficace, c'est la réutilisation.
Bien sur, ce que je dis, c'est dans le temps, hein.
Citation : comment ça y a quoi de global ? (par défaut il fout les forms et en global et les composants visuels qui sont dessus en public, mais bon suffit de le faire proprement en virant ce genre de chose ou en ne les utilisant pas) |
Oui, ce comportement par défaut n'est pas glop. Personellement je n'aime pas.
De plus, ça n'est pas implémenté sur un pure compilo C++.
Pour info, quite a avoir un truc propriétaire, je préfère nettement la toolkit fournie avec le langage Java.
Marsh Posté le 15-04-2003 à 12:55:49
antp a écrit : |
Tu ne va quand même pas me dire que tu lis tous le code source de leurs classes ?
Marsh Posté le 15-04-2003 à 14:18:26
Sr16 a écrit : |
non je lis pas tout
mais ça m'arrive souvent quand je m'ennuie d'aller voir ce que cachent certaines classes ou méthodes, ou quand un truc plante d'aller voir ce qu'il fait. Ou de voir si l'appel de tel méthode cache bcp de trucs pour avoir une idée de l'impact sur les performances, etc.
Marsh Posté le 12-04-2003 à 23:13:21
Salut a tous voila je voudrais connaitre les fonction pour le decoupage de chaine !
par example g :
char ligne[] = "salut comment ca va ?";
char gauche[8];
char droite[8];
char milieu[8];
voila, je voudrais ke gauche soit egale au 8 premier caractere de ligne, droit au 8 dernier et milieu du 2 eme caractere au 10 eme
merci