fadiam
Messages postés15Date d'inscriptionsamedi 6 février 2010StatutMembreDernière intervention16 mars 2010
-
16 mars 2010 à 12:44
deadhand
Messages postés152Date d'inscriptiondimanche 15 octobre 2006StatutMembreDernière intervention27 août 2010
-
17 mars 2010 à 09:05
bonjour
Voici un un morceau de code qui réorganise une chaine de caractères(numéro de téléphone) en ajoutant des espaces s'il n'y en a pas.
ex : 12345678 : 12 34 56 78 // 123456789 : 1 23 45 67 89( chaine impaire).
char * ret;
int n = strlen(chaine);
int i,j;
int compteur;
ret=malloc(sizeof(*ret) * (n + n / 2 + 1));
compteur = n % 2;
for(j=0, i=0;chaine[i]; i++, j++)
{
ret[j] = chaine[i];
compteur++;
if (compteur == 2)
{
compteur = 0;
ret[j+1] = '-';
j++;
}
}
ret[j-1] = '\0';
ici c'est toute la chaine qui est modifiée.
je voudrai maintenant pouvoir modifier la chaine si une sous chaine(entre les espaces) dépasse 4 caractères, une modification partielle en fait!
deadhand
Messages postés152Date d'inscriptiondimanche 15 octobre 2006StatutMembreDernière intervention27 août 20103 16 mars 2010 à 13:48
Salut !
Tu peux tester du premier caractère jusqu'au prochain espace et si cette sous-chaine n'est pas de logueur superieur à 2 tu ne fais rien mais sinon tu relances pour cette sous-chaines le code que tu as fait ci-dessus. Enfin tu l'ajoute à ta chaine totale et tu passe à la sous-chaine suivante.
J'espère t'avoir aidé même si je ne suis pas sur d'avoir repondu exactement à ta demande.
fadiam
Messages postés15Date d'inscriptionsamedi 6 février 2010StatutMembreDernière intervention16 mars 2010 16 mars 2010 à 16:24
salut
justement, j'ai pensé à compter le nombre de caractères entre chaques espaces. Si ce nombre>4, alors j'extrais cette sous chaine avec str_sub pour la modifier. après je la replace dans une nouvelle chaine dans laquelle on copie le reste de l'ancienne chaine.
char chaine[LGMAX+1];
char temp[LGMAX+1]="";
char *sous_chaine;
int fin=0;
int n=strlen(chaine);
while(i<=n)
{
compteur++; //compte le nombre de caractères
if(chaine[i]=='-' || chaine[i]=='\0') // '\0' pour la derniere sous chaine
{
compteur--; //pour enlever le '-'
if(compteur>4)
{
fin=i-1;
sous_chaine=str_sub(chaine,i-compteur , fin);
sous_chaine=segment(chr);
}
voila, la (ou les?)sous chaine fautive a été démasquée. Comment réecrire la chaine originale avec les modifications, si j'appelle ma fonction décrite plus haut?
deadhand
Messages postés152Date d'inscriptiondimanche 15 octobre 2006StatutMembreDernière intervention27 août 20103 17 mars 2010 à 09:05
Eh bien, c'est juste un petit problème algorithmique.
-Tu connais la position du premier chactère de la sous-chaine dans la première : premierCharactèrePrimaire
-Tu connais la position du premier charactère de la sous-chaine dans le résultat final : premierCharactère
-Tu connais la taille de la sous-chaine avant modification :tailleSousChaineAvantModif
-Tu connais la taille de la sous-chaine après modification : tailleDeLaSousChaineAprèsModif
Donc :
depuis i=premierCharactère jusqu'a tailleDeLaSousChaineAprèsModif
nouvelleChaine[i] = sousChaine[i-premierCharactère]
finDeLaBoucle
On continue ton code depuis l'indice = premierCharactèrePrimaire+tailleSousChaineAvantModif