elodie1511
Messages postés80Date d'inscriptionvendredi 24 janvier 2003StatutMembreDernière intervention 3 septembre 2004
-
22 mars 2004 à 09:52
lpikachu58
Messages postés351Date d'inscriptionsamedi 2 février 2002StatutMembreDernière intervention 6 mai 2004
-
23 mars 2004 à 14:11
bonjour, je souhaiterais faire comme la commande substr() en php mais en C++?
merci
elodie
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 22 mars 2004 à 14:04
En C++,
les std::string fournissent déjà la fonction substr
ex:int position 2, longueur 4;
std::string chaine = "Bonjour";
std::string sub = chaine.substr( position, longueur );
Vous n’avez pas trouvé la réponse que vous recherchez ?
elodie1511
Messages postés80Date d'inscriptionvendredi 24 janvier 2003StatutMembreDernière intervention 3 septembre 2004 22 mars 2004 à 14:28
si je fais ce que tu me dis ça me met ça comme erreur:
error C2653: 'std' : is not a class or namespace name
: error C2065: 'string' : undeclared identifier
(99) : error C2146: syntax error : missing ';' before identifier 'chaine'
(99) : error C2065: 'chaine' : undeclared identifier
(100) : error C2653: 'std' : is not a class or namespace name
(100) : error C2146: syntax error : missing ';' before identifier 'sub'
(100) : error C2065: 'sub' : undeclared identifier
(100) : error C2228: left of '.substr' must have class/struct/union type
(101) : error C2653: 'std' : is not a class or namespace name
et j'ai un peu de mal a comprendre, comment je peux mettre la reponse dans une variable?
merci
elodie
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 22 mars 2004 à 14:45
elodie1511,
j'ai compris ton substr, tu ne te crois pas capable d'ecrire cette mini func ???
Aucun besoin de std, string et autres cochonneries qui vont inserer une masse de code inutile dans ton exe, sans compter que ces 'string' passent leur temps en alloc desalloc et fractionnent l'espace memoire du processus.
Si on ne veut point programmer, y a VB pour le tout fait.
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 22 mars 2004 à 15:42
1.Je ne pensais pas que les admins étaient autoriser
à troller ( c'est bien du troll, non? au vu des arguments
sur la mémoire ). Je ne peux lutter évidement (sous peine de sanctions cerataines) donc je ne dis rien.
2. Je ne suis pas spécialiste du C mais il faut regarder
du côté du strncpy, voici un exemple (mais j'espère
que les gurus du C me corrigeront )
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 22 mars 2004 à 15:48
Hylvenir > je ne comprends pas le point 1.
Sanctions ? pour quoi faire, on peut discuter des avantages et inconvenients des diverses methodes en personnes civilisees, pas de prob.
Penses tu qu'ecrire un substr avec le buffer cible en param soit difficile, serieux non, et ainsi nenni alloc puisque l'appelant sait combien il en veut.
ASM n'entre pour rien dans l'affaire, un debutant doit s'entrainer a prog ces petites funcs, tres bon exercice.
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 22 mars 2004 à 18:51
Ouf, j'ai eu peur de tomber sur un intégriste C-ien comme
on en trouve parfois mais j'adore pinailler avec des personnes compétentes. Je suis d'accord pour les petits
exercices. le strncpy est indéfini si la cible chevauche la
source donc attention. L'exemple était pour illustrer
la différence entre la taille static du C (buffer de 24 par
exemple) contre le dynamisme du C++ (au pris de la lenteur
et d'autres cochonneries je vous l'accorde).
Sinon compliquée comme méthode à mon goût,
et celle-là ?
char* substr( char* ori, int deb, int lg, char* dest ) {
char* destSave = dest;
dest[lg] = '\0';
ori += deb;
while( lg-- && ( *dest++ = *ori++ ) ) ;
return destSave;
}
plus simple, plus courte et environ 10% plus rapide en moyenne sur mes deux environnements et ça fait la même chose (à mes bug près of course).
PS: la version std::string est environ deux fois plus lente...
et VC++ est obtient les plus mauvais score à mon bench.
PPS: il est trivial d'ajouter les contrôles sur deb, lg
et renvoyer la longueur réellement copiée.
C'est dommage que je n'ai pas le temps de jouer un peu.