Bah oui désolé lol [Résolu]

cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 16 août 2005 à 23:49 - Dernière réponse : steve_clamage 475 Messages postés dimanche 3 octobre 2004Date d'inscription 11 août 2006 Dernière intervention
- 17 août 2005 à 10:42
Sincérement désolé d'être une quiche mais bon

Les vacances ça me fait oublier certaines choses (enfaite c'est pas les vacances, c'est juste moi qui sait pas mais chut)

Donc voilà

J'arrive pu à découper une chaine de caractère... :'(



Genre j'ai Buff : "Program Files;C:\Program Files;SoundMan;C:\Windows\SoundMan.exe"

Bé je voudrais extraire tous les termes avant les ;



j'ai bien essayé genre :

char *c = Buff;

while(*c != '\0')

{

while(*c != ';')

{

//La je sais plus lol

c++:

}

c++;

}

J'voudrais bien pouvoir me passer de strch je sais pas trop quoi là :p

Thanks :p

void Aurevoir( void ); //Bonne journée
Afficher la suite 

Votre réponse

19 réponses

Meilleure réponse
steve_clamage 475 Messages postés dimanche 3 octobre 2004Date d'inscription 11 août 2006 Dernière intervention - 17 août 2005 à 00:11
3
Merci
Avec strtok par exemple.

http://www.cplusplus.com/ref/cstring/strtok.html

Merci steve_clamage 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de steve_clamage
Meilleure réponse
steve_clamage 475 Messages postés dimanche 3 octobre 2004Date d'inscription 11 août 2006 Dernière intervention - 17 août 2005 à 00:38
3
Merci
T'a corrigé ? Enlève l'étoile devant c



char *c = strtok(Buff, ";");

while( c != NULL) // pas *c

{

MessageBox(NULL, c, NULL, 0x40);

c = strtok(NULL, ";");

}

Merci steve_clamage 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de steve_clamage
Meilleure réponse
xterminhate 371 Messages postés dimanche 4 janvier 2004Date d'inscription 23 septembre 2009 Dernière intervention - 17 août 2005 à 09:06
3
Merci
La fonction getline se charge de tout ....



#include<sstream>



int main()

{

std::istringstream is( Buffer );

char c[256];

while( is.getline( c, 256, ';' ) )

MessageBox(0,c,0,...blabla...MFC...

}


Cordialement,
Xterminhate.

Merci xterminhate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de xterminhate
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 16 août 2005 à 23:55
0
Merci
va dépendre de ce qu'il faudra faire des différentes parties.
Prépare un truc bien clair pour demain.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 17 août 2005 à 00:06
0
Merci
Bé en faite j'explique :) lol

Donc ma fonction veut charger toutes les caractéristiques d'un utilisateur

En sachant que les caractéristiques sont le nom des raccourcis et leur chemin

En considérant que dès que je récupere ces 2 caractéristiques, je peux
créer un objet SHORTCUT et l'ajouter à mon utilisateur, je voudrais
tout les 2 ";" découper la partie récupéré en 2 lol

C'est dur à expliquez rolala



Bon genre dans mon fichier il y a "Program Files;C:\Program Files;SoundMan;C:\Windows\SoundMan.exe"



Le programme récupéré la partie Program Files;C:\Program Files

Et le découpéré en 2 jusqu'au ";" pour ensuite créer un objet raccourci :s



Désolé de pas être clair lol

Je crains je sais, je ne me comprend pas moi même alors euh bonne chance :$


void Aurevoir( void ); //Bonne journée
Commenter la réponse de cs_Joky
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 17 août 2005 à 00:27
0
Merci
Bé en effet ça marche très bien

Mais il me plante à la fin...

Comprend pas trop



char *c = strtok(Buff, ";");

while(*c != NULL)

{

MessageBox(NULL, c, NULL, 0x40);

c = strtok(NULL, ";");

}
ça viendrait ptete du fait qu'il y'a le caractère ; juste avant la fin non ?
void Aurevoir( void ); //Bonne journée
Commenter la réponse de cs_Joky
steve_clamage 475 Messages postés dimanche 3 octobre 2004Date d'inscription 11 août 2006 Dernière intervention - 17 août 2005 à 00:33
0
Merci
while (c != NULL) ne déférence pas c
Commenter la réponse de steve_clamage
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 17 août 2005 à 00:35
0
Merci
C'est pourtant le même principe que dans l'exemple que tu m'as donné...

C'est étrange lol

void Aurevoir( void ); //Bonne journée
Commenter la réponse de cs_Joky
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 17 août 2005 à 00:41
0
Merci
Ah en effet, lol

J'vous en voudrais pas si vous aviez envie de me jeter quelques pierre ;)



Merci bien Mr :p
void Aurevoir( void ); //Bonne journée
Commenter la réponse de cs_Joky
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 17 août 2005 à 09:17
0
Merci
Ahhhh lol j'aurais bien essayé mais la vu que tout y marche bien mdr :p

J'ai trop peur :$

Mais en faite je l'avais déjà utilisé une fois et en effet elle marche très bien ;)
void Aurevoir( void ); //Bonne journée
Commenter la réponse de cs_Joky
xterminhate 371 Messages postés dimanche 4 janvier 2004Date d'inscription 23 septembre 2009 Dernière intervention - 17 août 2005 à 09:51
0
Merci
Avec ta dernière réponse, on a vraiment l'impression que tu as écrit un code à la fois robustesse et stable ! ^_^ Bon courage...
Commenter la réponse de xterminhate
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 17 août 2005 à 09:55
0
Merci
On sent de l'ironnie lol, on se fou pas de moi hein :p

D'abord j'fais pour que le prog marche :)

Ensuite, on voit l'optimisation :D

void Aurevoir( void ); //Bonne journée
Commenter la réponse de cs_Joky
steve_clamage 475 Messages postés dimanche 3 octobre 2004Date d'inscription 11 août 2006 Dernière intervention - 17 août 2005 à 09:56
0
Merci
Comme d'habitude la question est de savoir si c'est du C ou du C++,
quand je vois des chaines C c'est du C pour moi alors je donnes la
solution en C
Commenter la réponse de steve_clamage
xterminhate 371 Messages postés dimanche 4 janvier 2004Date d'inscription 23 septembre 2009 Dernière intervention - 17 août 2005 à 10:02
0
Merci
Stevy > Par défaut, je crois que tu peux filer la solution C++ parce que quasiment plus personne n'utilise un compilateur pur C...

Jorky > Fait nous un jolie topic unique à la Jorky's touch.

Balance tout le code d'un coup, voire dit nous ce que tu veux faire globalement. Ca t'évitera de devoir découper ton code en petits fragments et faire de multiples posts ;-) Je plaisante....
Commenter la réponse de xterminhate
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 17 août 2005 à 10:06
0
Merci
strtok devrait être banni, ça insère des variables implicites dans le prog "à l'insu de notre plein gré" et c'est source de plantage, par exemple appels simultanés en multi threading.
Se fera bien plus surement avec 2 pointeurs et rien de plus.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
steve_clamage 475 Messages postés dimanche 3 octobre 2004Date d'inscription 11 août 2006 Dernière intervention - 17 août 2005 à 10:11
0
Merci
strtok n'est pas threadsafe, c'est écris dans la doc il me semble.
Commenter la réponse de steve_clamage
xterminhate 371 Messages postés dimanche 4 janvier 2004Date d'inscription 23 septembre 2009 Dernière intervention - 17 août 2005 à 10:13
0
Merci
En effet, on oublit souvent de bien vérifier que les algorithmes de base ne sont pas systématiquement thread safe....
Commenter la réponse de xterminhate
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 17 août 2005 à 10:33
0
Merci
Exemple à la va vite:

// MODIFIE LA CHAINE EN PARAM !!!
void __stdcall Morceaux(char *psz)
{
char *c, *p, *out;
out = psz + strlen(psz);
p = psz;
while(*p == ';') p++; // ON NE SAIT JAMAIS
if(!*p) return;
nextPASS:
c = p;
while(p < out) {
if(*p == ';') break;
p++;
}
*p = 0;
MessageBox(0, c, "R", 0);
if(++p < out) goto nextPASS;
}


int WINAPI WinMain(HINSTANCE h, HINSTANCE x, LPSTR y, int z)
{
char buf[80];
strcpy(buf, "Program Files;C:\\Program Files;SoundMan;C:\\Windows\\SoundMan.exe");
Morceaux(buf);
return 0;
}

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
steve_clamage 475 Messages postés dimanche 3 octobre 2004Date d'inscription 11 août 2006 Dernière intervention - 17 août 2005 à 10:42
0
Merci
Pour que ce soit modulable faudrais carrement retourner un char** et
une taille, et faire ca proprement en C (avec tout les controles
d'erreurs) c'est tres laborieux.

Faut voir strtok_r et strsep de la glibc.
Commenter la réponse de steve_clamage

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.