cs_firemax
Messages postés24Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention19 août 2005
-
2 juin 2005 à 21:25
cs_firemax
Messages postés24Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention19 août 2005
-
3 juin 2005 à 02:08
Bonjour
Je me posais une question , j'aimerais diviser une chaine en sous
chaine pour pouvoir ensuite les trier par longueur de chaine de
caractere
Je m'explique : si je rentre "ceci est un essai" j'aimerais arriver a
classer les mot par longueur mais je ne vois pas de solution a
pars en separant la chaine en plusieurs chaine :s
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 2 juin 2005 à 23:38
si tu est débutant, c'est sur que mon code n'est pas le plus facile à
comprendre (en gros txt est le pointeur vers le debut du texte, et
txt+taille pointe vers la fin). Je refais autrement:
char* tab[100]; //tableau de mot
int i = 0; //comteur pour tab
char* ptr = txt;
for(int j = 0; j < taille; j++)
{
if(*ptr == ' ')
{
*ptr = 0; // on le fait a chaque fois, pour bien séparer les mots
ptr++; //ptr +1 car le debut est l'espace
tab[i] = ptr; //tab[i] pointe sur la position actuelle de ptr, c'est a dire le debut d'un mot
i++;
j++;
}
ptr++;
}
Tu n'a peut être pas encore bien saisie la notion de pointeur. Si on ne fait pas à chaque fois *ptr = 0, voila ce qu'on obtient:
char* tab[] = {"ceci est un essai", "est un essai", "un essai", "essai"};
Ce n'est pas ce qu'on veut, tu vois qu'on doit remplacer les espace pas des 0, qui permetttent de spécifier la fin d'un chaine
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 2 juin 2005 à 21:49
Oui en geos c'est ca: tu sépares grace aux espaces. Il suffit que tu
construises un tableau de char* contenant toutes les positions juste
après un espace (ou caractère des séparation quoi). Puis tu remplace
tous les espaces par des 0 pour que chaque pointeur ne pointe que sur
un seul mote.
Dans ton exemple, tu obtiendras
char* tab[] = {"ceci", "est", "un", "essai"};
En mémoire, la chaine initiale est "ceci est un essai" et devient donc "ceci\0est\0un\0essai"
Tu n'a plus ensuite qu'a trier tab avec ta méthode préférée, par exemple qsort