0/5 (5 avis)
Snippet vu 32 111 fois - Téléchargée 21 fois
#include <iostream> #include <vector> #include <string> #include <stdlib.h> using namespace std; int Split(vector<string>& vecteur, string chaine, char separateur) { vecteur.clear(); string::size_type stTemp = chaine.find(separateur); while(stTemp != string::npos) { vecteur.push_back(chaine.substr(0, stTemp)); chaine = chaine.substr(stTemp + 1); stTemp = chaine.find(separateur); } vecteur.push_back(chaine); return vecteur.size(); } int main() { cout << "Test de split\n" << endl; string str = "Bonjour le monde ..."; vector<string> VecStr; int nbTabl = Split(VecStr, str, ' '); cout << "Nb de parties : " << nbTabl << "\n" << endl; for(int i = 0; i < nbTabl; ++i) { cout << i << " : '" << VecStr[i] << "'" << endl; } cout << endl; system("PAUSE"); return 0; }
12 mai 2008 à 15:31
Pour vider le tableau dynamique, je met : vecteur[0].empty();
Ce qui est faux : empty renvoie un bool si les ocnteneur standard est vide.
Je voulais mettre vecteur[0].clear();
clear vide bien le tableau ... :)
Bonne prog
Colin CHARGY
22 juil. 2007 à 18:13
par contre si ton "monde" commence à devenir vraiment grand avec un fichier de quelques Mo ça risque de faire un peu long ^__^
passer quelques minutes à optimiser ce genre de code t'apportera quelques connaissances niveau utilisation de la stl qui est très pratique
au cas où cela t'intéresses, il y a un très bon cours de C++ en français téléchargeable ici :
http://casteyde.christian.free.fr/cpp/cours/cours_cpp-1.40.6-html.zip
dont la partie II traites de la stl
ps: c'est un très bon livre que tu as entre les mains
22 juil. 2007 à 11:07
Tout ce que tu dis est vrai ...
Ce code sert pour charger la contenu du monde dan un jeu durant le phase de chargement donc je suis pas à quelques millisecondes près...
Ceci dit, je suis inexcusable quand même puisque j'ai sous la main "Le language C++" de Bjarne Stroustrup dans lequel tout ceci est expliquer et en plus je l'ai lu...
Je n'ai pas l'habitude d'utiliser ni push, ni les itérateurs, ni find ...
Par contre, il est vrai que j'utilise des resize à tut bout de champs...
J'ai commencer par écrire cette fonction avec find, mais sans résultats, c'est pour cela que j'ai décider de faire caractère par caractère.
Quand j'aurais du temp, je la réécrirais en suivant tes conseils ...
Merci ^^
Colin CHARGY
21 juil. 2007 à 23:51
intéressante source mais je t'invite à quelques corrections :
- évites de passer un pointeur vers vctor en paramètre mais plutot une référence, cela t'évitera de faire un test que tu ne fais pas : vérifier que le pointeur passé en paramètre n'est pas nul
- c'est absurde d'utiliser des resize à tout bout de champs, tu ne connais pas la méthode push ? resize n'est à utiliser que si tu connais la taille de vector que tu veux
- normalement on parcours une string, un vector, ect... ce qu'on appelle les conteneurs de la stl avec des itérateurs
- pour trouver un caractère dans une string, la classe possède une méthode nommé find
voilà de quoi optimiser ton code ;-)
20 juil. 2007 à 23:44
On pourrait replacer tous les "->at(qqch)" par "[qqch]" pour accélérer le code mais enlever le contrôle des index ...
Il serait aussi intéressant de stocker "vecteur->size() - 1" dans une variable pour y accéder plus vite ...
Voilà
Colin CHARGY
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.