Garder un mot d'une string - C++ - Programmation
Marsh Posté le 13-01-2007 à 21:51:38
salut, ba il y aurait aussi la méthode find() de la classe String...
ce site devrais t'aider :
http://www.sgi.com/tech/stl/basic_string.html
[edit] je viens de voir le boost::tokenizer ba c'est clairement plus efficace, sans aucune comparaison
Marsh Posté le 13-01-2007 à 22:38:35
Joel F a écrit : boost::tokenizer |
Amonchakai a écrit : salut, ba il y aurait aussi la méthode find() de la classe String... |
Merci les gars!!
Je regarde ça et je vous tiens au courant!
Marsh Posté le 14-01-2007 à 13:34:50
Code :
|
"chemin" etant le chemin complet d'acces au fichier
Marsh Posté le 14-01-2007 à 21:06:52
merci beaucoup pour ton code!
mais y'a un soucis:j'ai essayé de rentrer "c:\mes documents\toto.txt"
et il m'a sortit comme nom de fichier "mes"...
de plus je comprends pas la ligne "x = chemin.find_last_of('\\', chemin.length()) + 1;" : pourquoi avoir mis '\\' et pas simplement '\'?C'est bien ça le caractère délimiteur non?
Edit:en fait le programme ne gère pas les espaces c'est ça le soucis..
Merci bien de m'aider en tous cas!!
@++
Marsh Posté le 15-01-2007 à 05:00:09
Ben en fait je l'ai teste sous linux et ca marche, qu'il y ai des espaces ou pas dans chemin.
Le \\ c'est parceque \ seul est un caracter special. Peut-etre que sous Windows c'est different...
Marsh Posté le 15-01-2007 à 18:48:02
Ouai j'ai essayé un seul sous windows bah ça marche pas :ça reconnait tout ce qui suit comme du texte.
Et personne à une idée pour que les espaces ne soient plus un caractère délimiteur?
Marsh Posté le 15-01-2007 à 19:45:42
salut,
Ben j'avoue que je suis assez perplexe : le code de Youplab00m fonctionne chez moi... il n'y a pas de problème si je rajoute des espaces dans la chaine... (en fait je vois même pas pourquoi il y en aurait ). la chaine sur laquelle tu fait les test tu l'obtiens comment ? si tu la rentre en dur dans ton programme tu met bien des '\\' et non des '\' tout seul hein ?
genre std::string path("c:\\test\\monFichier" );car si tu en met qu'un il prend le caractère d'échappement (si il existe sinon erreur...) genre \t te fait une tabulation... et donc pour avoir le caractère '\' il faut faire l'échappement du caractère d'échappement => d'où le '\\'
sinon... ben il y a toujours Boost avec le tokenizer
http://www.boost.org/libs/tokenizer/index.html
un ex :
Code :
|
bon là ça te donne que le premier mot... pour le dernier, tu incrémente l'itérateur
(d'ailleurs au passage j'ai pas trouvé dans la doc pourquoi on avait pas le droit de faire tokens.end()-1 ni même begin()+1... on peut juste l'incrémenter avec ++ si quelqu'un sait pourquoi je serai pas contre une explication )
Marsh Posté le 15-01-2007 à 22:24:00
bah bizarement je met des "\" tous seul et ça marche très bien...tant qu'il n'y a pas d'espaces!
voyez par vous même:
ici ça marche
là ça marche plus
et voila le code:
Code :
|
Marsh Posté le 15-01-2007 à 23:11:36
A propos du \, quand tu le saisis, il est automatiquement stocké comme \\ puisque ce n'est pas codé en dur.
Pour le problème d'espace, regarde du côté de cin.getline, tu devrais t'en sortir avec ça.
Marsh Posté le 16-01-2007 à 19:51:40
En effet le problème vient surement de là...vu que l'espace agit comme un caractère délimiteur avec le cin ça pouvait pas marcher
par contre j'ai donc remplacé la ligne du cin par ça:
Code :
|
et ça me met ça comme erreur je comprend pas:
Citation : .\Projet chaine caractère.cpp(18) : error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize)' : impossible de convertir le paramètre 1 de 'std::string' en 'char *' |
Marsh Posté le 16-01-2007 à 22:11:02
pedro001 a écrit : En effet le problème vient surement de là...vu que l'espace agit comme un caractère délimiteur avec le cin ça pouvait pas marcher
|
getline ecrit dans un tableau de char, pas dans une string.
Il faut l'utiliser comme ca:
string chemin;
char buffer[1000];
cin.getline(buffer, 1000);
chemin = string (buffer);
Marsh Posté le 16-01-2007 à 22:39:29
c'est compliqué la prog quand on débute...mais ça marcheee!!!!!
Merci tout le monde de m'avoir aider!!
@++
Marsh Posté le 13-01-2007 à 21:36:57
Salut tout le monde!!
J'suis en train de faire un programme qui à un moment permet de choisir un fichier et donc d'afficher le chemin d'accès à celui-ci dans une textbox (je suis sous visual c++).
Le chemin d'accès est donc affiché sous la forme "C:\...\mon dossier\mon fichier" et est stocké dans une string.Je voudrais extraire le nom du fichier pour le mettre dans une requète ftp (ça marche comme ça mais ce sera plus propre).
Il faut donc un code qui analyse la string en cherchant le caractère "\" et que ce code renvoi dans une autre string ce qui se trouve après le dernier "\".
Je vois le truc mais j'arrive pas à le coder...Quelqu'un peut m'aider s'il vous plait?
@++