Split d'une string

Résolu
sebastienmz Messages postés 139 Date d'inscription mardi 16 mai 2006 Statut Membre Dernière intervention 23 juin 2008 - 17 nov. 2006 à 11:49
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 17 nov. 2006 à 17:46
Bonjour j'ai une string qui contien la date dans ce format : Fri Nov 17 11:43:56 2006
et j'aimerais
mettre chaque partie dans une char différente par exemple :
date = 17
jour = Fri
mois = Nov
annee = 2006
heure = 11
minutes = 43
sec = 56
comment faire ?
-----
Sébastien Metthez
www.sebastien-metthez.com
A voir également:

9 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
17 nov. 2006 à 14:24
Salut:

Voici une solution, quoique les gens ici détestent l'utilisation de "strtok". Comme ça tu as au moins une idée claire de ce qu'il faut faire.

#include <string.h>
#include

using namespace std;

char ** tokenize (char * s, const char * delimiter, int n)
{
    char ** res = new char * [n];
    char * sep = strtok (s, delimiter);
   
    int i = 0;
    while (sep)
    {
          res [i++] = strdup (sep);
          sep = strtok (NULL, delimiter);
    }
    return res;
}

int main(int argc, char *argv[])
{
    char str [] = "Fri Nov 17 11:43:56 2006";
   
    char ** tokens1;
    char ** tokens2;
   
    tokens1 = tokenize (str, " ", 5);
    tokens2 = tokenize (tokens1 [3], ":", 3);
   
    cout << "Jour : " << tokens1 [0] << endl;
    cout << "Mois : " << tokens1 [1] << endl;
    cout << "Date : " << tokens1 [2] << endl;
    cout << "Heures : " << tokens2 [0] << endl;
    cout << "Minutes : " << tokens2 [1] << endl;
    cout << "Secondes : " << tokens2 [2] << endl;
    cout << "Annee: " << tokens1 [4] << endl;
   
    system("PAUSE");
    return EXIT_SUCCESS;
}
3
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
17 nov. 2006 à 12:02
Salut,
Il n'y a pas de fonction toute faite dans la classe string, il te faudra la coder toi-même. A priori, pas de souci majeur car toutes tes données sont séparées par des espaces...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
sebastienmz Messages postés 139 Date d'inscription mardi 16 mai 2006 Statut Membre Dernière intervention 23 juin 2008
17 nov. 2006 à 13:30
Mais comment faire ?
-----
Sébastien Metthez
www.sebastien-metthez.com
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
17 nov. 2006 à 14:26
Salut:

J'ai oublié de libérer l'espace mémoire utilisé vers la fin du programme:

ajoutes ceci après l'affichage:

delete [] tokens1;
delete [] tokens2;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
17 nov. 2006 à 14:32
Soit tu parcours ta chaine avec 2 pointeurs, tu bouges le second jusqu'à trouver un espace, tu traites ce qui se trouve entre les 2 pointeurs et tu recommence...
Soit tu utilises la fonction sscanf().

string truc="Fri Nov 17 11:43:56 2006";
char j[4],m[4];
int d,h,mm,s,a;
sscanf(truc.c_str(),"%3s %3s %d %d:%d:%d %d",j,m,&d,&h,&mm,&s,&a);

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
sebastienmz Messages postés 139 Date d'inscription mardi 16 mai 2006 Statut Membre Dernière intervention 23 juin 2008
17 nov. 2006 à 14:33
sa me dit : [Warning] assignment makes pointer from integer without a cast

Sébastien Metthez
www.sebastien-metthez.com
0
sebastienmz Messages postés 139 Date d'inscription mardi 16 mai 2006 Statut Membre Dernière intervention 23 juin 2008
17 nov. 2006 à 14:41
oublier de précicer je suis sous dev cpp et je fait du C donc les news ne marche pas

Sébastien Metthez
www.sebastien-metthez.com
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
17 nov. 2006 à 14:46
En précisant ton environnement dès le départ, tu aurais eu une réponse plus adéquate...
Les new du C++ sont les malloc du C
Après, à toi d'adapter...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
17 nov. 2006 à 17:46
Salut:

Je veux critiquer ma solution si tu utilises plusieurs threads qui fait chacun appel à la fonction "strtok" ça risque de donner des résultats erronés.

Mais dans ton cas comme tu utilises "strtok" dans une simple programme monothread
cette fonction est l'idéale solution pour toi.

Sinon tu peux créer ta propre fonction/classe pour faire le même travail.
0
Rejoignez-nous