Accueil > Forum > > > > votre avis sur une fonction de split...
votre avis sur une fonction de split...
jeudi 29 mars 2007 à 23:30:11 |
votre avis sur une fonction de split...

Matt67
|
Bonsoir, Je dois faire une fonction de "splitage" de chaine. J'ai realisé ce bout de code et j'aimerais votre avis. La fonction n'est pas tout a fait finie mais je voudrais savoir si je peux continuer sur cette fonction. #include <stdio.h> #include <stdlib.h>
static const size_t sizestr = 256; static size_t champ = 0;
int mysplit_free(char **tab) { for(int i = 0; i < champ; i++) { free(tab[i]); tab[i] = NULL; }
free(tab);
tab = NULL;
return 0; }
char** mysplit(char *chaine, char sep) { char *c = NULL; char **temp = NULL; char **old = NULL; size_t index = 0;
/* test chaine vide */ if(chaine == 0) return NULL;
/* on parcourt la chaine */ c = chaine;
/* allocation memoire pour la premiere chaine */ temp = (char**)malloc((champ + 1) * sizeof(char*)); if(temp == NULL) return NULL;
temp[champ] = (char*)malloc(sizestr * sizeof(char)); if(temp[champ] == NULL) { free(temp); return NULL; }
temp[champ][0] = 0;
/* sauvegarde du pointeur */ old = temp;
/* tant qu'on est pas en fin de chaine */ while(*c != 0) { /* c'est le separatif */ if(*c == sep) { /* on termine la chaine */ temp[champ][index] = 0; index = 0; champ++;
/* re-allocation memoire pour une chaine en plus */ temp = (char**)realloc(temp, (champ + 1) * sizeof(char*)); if(temp == NULL) { mysplit_free(old); return NULL; }
temp[champ] = (char*)malloc(sizestr * sizeof(char)); if(temp[champ] == NULL) { champ--; mysplit_free(temp); return NULL; } temp[champ][0] = 0;
/* sauvegarde du pointeur */ old = temp; } else temp[champ][index++] = *c;
c++; }
/* dernier champs */ temp[champ++][index] = 0;
/* fin de chaine */ temp = (char**)realloc(temp, (champ + 1) * sizeof(char*)); if(temp == NULL) { mysplit_free(old); return NULL; } temp[champ] = NULL;
return temp; }
int main() { char *toto = "hello;my;name;is;bond;james;bond"; char **retour = NULL;
retour = mysplit(toto, ';');
while(*retour) puts(*retour++);
mysplit_free(retour); }
merci pour vos réponses, Matt...
|
|
vendredi 30 mars 2007 à 10:01:20 |
Re : votre avis sur une fonction de split...

turnerom
|
include <iostream>
#include <boost/tokenizer.hpp>
void
split( const std::string & Msg, const std::string & Separators ) {
typedef boost::tokenizer<boost::char_separator<char> > my_tok;
boost::char_separator<char> sep( Separators.c_str() );
my_tok tok( Msg, sep );
for ( my_tok::const_iterator i = tok.begin(); i != tok.end(); ++i ) {
std::cout << *i << '\n'; } }
int main() { split( "mot-compose1;mot,compose2;[mot][compose3];mot compose4;<mot><compose><5>", ";" ); }
|
Ce programme produit le résultat suivant :
mot-compose1 mot,compose2 [mot][compose3] mot compose4 <mot><compose><5>
|
TuRn3r
|
|
vendredi 30 mars 2007 à 16:58:49 |
Re : votre avis sur une fonction de split...
|
vendredi 30 mars 2007 à 21:05:13 |
Re : votre avis sur une fonction de split...

Matt67
|
Bonsoir,
Merci pour vos réponses.
turnerom : une contrainte (qui n'en est pas une d'ailleurs), ca doit être du C.
yann_lo_san : La fonction strtok ne me suffit pas car je dois faire autre chose que de splitter ma chaine comme quand je rencontre ' ou ", je dois mettre un \ devant ou encore, il faut que je limite la taille de mes champs et d'autre chose encore.
C'etait plutot un avis sur la façon de faire qui m'interresse. Car s'il y a des choses qui ne vont pas du tout, autant modifier maintenant et continuer sur "de bases saines".
Bonne soirée,
Matt...
|
|
Cette discussion est classée dans : chaine, champ, temp, char, free
Répondre à ce message
Sujets en rapport avec ce message
#def [ par xarier ]
salut tous fje voudrait savoir un trucs sur les #defest ce que je peut faire un #def pour une fonction ex : un #def pour cachar* Replace( char* Chain
Assosier 2 chaine de caractere PB :s [ par Booster ]
Bonjour,Alors voila je veux tout simplement assosier 2 chaines de caractere mais jaimerais le faire sans passer par une variables intermediaire je m'e
plantage avec free( ) !!! [ par ElectricalMan ]
slt tt le monde,j'ai un beau plantage avec la fonction free ! donc si qq peut m'aider pck je tourne en rond.j'ai mis en bleu les parties concernées.
petit problême de chaine [ par Cphil51 ]
Je débute en C++ et j'ai un petit problême avec mon code. J'ai créé une fonction qui prend en argument une chaine et un entier et qui retourne les n p
Ordre dans les déclarations de variables ??! [ par vincemail ]
Bonjour à tous, je suis en train de faire un programme en C++ avec devC++, et je viens de trouver un bug que je n'arrive pas à comprendre, je veux sto
Arbre Binaire. Probleme de concatenation [ par YnOThAr ]
Bonjour tout le monde ! La fin de l'année arrive et avec elle vient la fin des projets...généralement inachevés. En ce moment je travail sur la compre
Problème avec delete[] [ par gbourgeois0019 ]
SalutJ'ai un petit problème. voici le code :char* Temp = new char[100];char* Title = new char[100];strcpy(Temp,"Exemple");Title = Temp + 1 ;delete[] T
fichie texte [ par cedric3456 ]
bonjour je suis tres nul en c++ je debute pouvez vous m'aidez je cherche a faire 3 fonction sur Dev-C++ 4.9.9.2fonction :ecrire (nom_fichier,chaine_ch
Comment free un char *** ? [ par kaervas ]
Bonjour, j'ai un probleme pour free un char ***,pour le char ** j'utilisais cette fonction (qui a priori marche):void dfree(char **str){ int i
Allocation dynamique de char* .... [ par Gendal67 ]
Bonjour à tous....Avant d'acheter un flingue pour de bon, je me suis dit qu'il pourrait etre judicieux de demander de l'aide quelque part... voila, je
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|