Supprimer la répétition une chainedecaractère
Résolu
tariktrk
Messages postés
46
Date d'inscription
Statut
Membre
Dernière intervention
-
tariktrk Messages postés 46 Date d'inscription Statut Membre Dernière intervention -
tariktrk Messages postés 46 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai un petit problème avec ce exercice
écrire une fonction , nommée supprime_repetition ,qui supprime d'une chaine de caractères les répétition de caractères identiques consécutifs,la fonction ne doit pas créer une suite de plusieurs caractére identiques par un seul de ces caractères. la fonction ne dois pas créer une nouvelle chaine de caractères mais modifier la chaine qui lui est transmise comme paramètre, la fonction retourne la longueur de la nouvelle chaine ;
exemple la fonction devera transformer la chaine "aaabbccccdee" en la chaine "abcde" et retourne 5
écrié un programme c qui lit de puis le clavier une chaine txt,fait appel a la fonction supprime repitition puis affiche la chaine txt et sa longueur .
ma tentation est comme c est dessus mais ça ne marche pas vous pouviez m'aidera le faire corriger svp
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
void supprime_repitition(char txt[])
{int i,j,n,l;
l=strlen(txt);
for(i=0;i<l;i++)
{printf("%d\n",strcmp((txt+i),(txt+i+1)));
if(strcmp((txt+i),(txt+i+1))==NULL)
{for(j=i;j<l;j++)txt[j]=txt[j+1];}
}
printf("%s %d",txt,strlen(txt));
}
main()
{char txt[50];
printf("entrez une texte(de -49 caractaire\n");
gets(txt);
printf("%s\n",txt);
supprime_repitition(txt);
getch();
return 0;
}
j'ai un petit problème avec ce exercice
écrire une fonction , nommée supprime_repetition ,qui supprime d'une chaine de caractères les répétition de caractères identiques consécutifs,la fonction ne doit pas créer une suite de plusieurs caractére identiques par un seul de ces caractères. la fonction ne dois pas créer une nouvelle chaine de caractères mais modifier la chaine qui lui est transmise comme paramètre, la fonction retourne la longueur de la nouvelle chaine ;
exemple la fonction devera transformer la chaine "aaabbccccdee" en la chaine "abcde" et retourne 5
écrié un programme c qui lit de puis le clavier une chaine txt,fait appel a la fonction supprime repitition puis affiche la chaine txt et sa longueur .
ma tentation est comme c est dessus mais ça ne marche pas vous pouviez m'aidera le faire corriger svp
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
void supprime_repitition(char txt[])
{int i,j,n,l;
l=strlen(txt);
for(i=0;i<l;i++)
{printf("%d\n",strcmp((txt+i),(txt+i+1)));
if(strcmp((txt+i),(txt+i+1))==NULL)
{for(j=i;j<l;j++)txt[j]=txt[j+1];}
}
printf("%s %d",txt,strlen(txt));
}
main()
{char txt[50];
printf("entrez une texte(de -49 caractaire\n");
gets(txt);
printf("%s\n",txt);
supprime_repitition(txt);
getch();
return 0;
}
A voir également:
- Supprimer la répétition une chainedecaractère
- Supprimer rond bleu whatsapp - Guide
- Supprimer une page word - Guide
- Comment supprimer une application préinstallée sur android - Guide
- Supprimer pub youtube - Accueil - Streaming
- Fichier impossible à supprimer - Guide
4 réponses
Votre programme est illisible!
Au lieu de:
void supprime_repitition(char txt[])
{int i,j,n,l;
l=strlen(txt);
for(i=0;i<l;i++)
{printf("%d\n",strcmp((txt+i),(txt+i+1)));
if(strcmp((txt+i),(txt+i+1))==NULL)
{for(j=i;j<l;j++)txt[j]=txt[j+1];}
}
printf("%s %d",txt,strlen(txt));
}
écrivez
C'est quand même plus lisible, isn't ?
- strcmp ne renvoie pas un pointeur, mais un entier (donc ne pas utiliser NULL qui est plutôt réservé aux pointeur), mais le compilateur l'accepte, ce n'est qu'une question de convention d'écriture.
Au lieu de:
essayez plutôt:
car il faut sauter un caractère.
Au lieu de:
void supprime_repitition(char txt[])
{int i,j,n,l;
l=strlen(txt);
for(i=0;i<l;i++)
{printf("%d\n",strcmp((txt+i),(txt+i+1)));
if(strcmp((txt+i),(txt+i+1))==NULL)
{for(j=i;j<l;j++)txt[j]=txt[j+1];}
}
printf("%s %d",txt,strlen(txt));
}
écrivez
void supprime_repitition (char txt[]) { int i, j, n, l; l = strlen (txt); for (i=0; i<l; i++) { printf ("%d\n", strcmp ((txt+i), (txt+i+1))); if (strcmp ((txt+i), (txt+i+1)) == NULL) { for (j=i; j<l; j++) txt[j] = txt[j+1]; } } printf ("%s %d", txt,strlen(txt)); }
C'est quand même plus lisible, isn't ?
- strcmp ne renvoie pas un pointeur, mais un entier (donc ne pas utiliser NULL qui est plutôt réservé aux pointeur), mais le compilateur l'accepte, ce n'est qu'une question de convention d'écriture.
Au lieu de:
for (j=i; j<l; j++)
essayez plutôt:
for (j=i+1; j<l; j++)
car il faut sauter un caractère.
si j'ai bien compris ma fonction sera comme ca mais ca ne marche pas encore domage
void supprime_repitition (char txt[])
{
int i, j, n, l;
l = strlen (txt);
for (i=0; i<l; i++)
{
if (strcmp ((txt+i), (txt+i+1)) == 0)
{
for (j=i+1; j<l; j++)
txt[j] = txt[j+1];
}
}
printf ("%s %d", txt,strlen(txt));
}
void supprime_repitition (char txt[])
{
int i, j, n, l;
l = strlen (txt);
for (i=0; i<l; i++)
{
if (strcmp ((txt+i), (txt+i+1)) == 0)
{
for (j=i+1; j<l; j++)
txt[j] = txt[j+1];
}
}
printf ("%s %d", txt,strlen(txt));
}
oui vous avez raisons dsl
alors il me affiche tout simplement se que j'entrai avec la longueur de txt
exemple apres compilation
entrez une texte(de -49 50 caractère exécuter
rezzrtttezz
rezzrtttezz
rezzrtttezz 11
alors il me affiche tout simplement se que j'entrai avec la longueur de txt
exemple apres compilation
entrez une texte(de -49 50 caractère exécuter
rezzrtttezz
rezzrtttezz
rezzrtttezz 11
L'erreur vient de l'utilisation de 'strcmp' qui compare des chaînes et ce n'est pas ce que l'on veut; on veut simplement comparer deux caractères.
#include <stdio.h> #include <stdlib.h> #include <string.h> void supprime_repetition (char txt[]) { int i, j; for (i=0; i<strlen(txt); i++) { if (txt[i] == txt[i+1]) { for (j=i; j<strlen(txt); j++) txt[j] = txt[j+1]; } } printf ("%s %d", txt,strlen(txt)); } main() { char txt[50]; printf("entrez une texte (de -49 caractères\n"); gets(txt); printf("%s\n",txt); supprime_repetition(txt); return 0; }
oui exactement j ai un problème dans les accolade ainsi que la fonction strcmp ainsi il faut un petit i--;
car si je lui donne 3 de même caractère il efface seulement 1 et il laisse les deux donc il dois toujours retourner a la au la valeur de i qui était la cause chaque fois il entre dans la boucle if
voila c fais et mon dernier mots c
N.B je ne sais si j ai bien fais comprendre le message mais ca c est le programme
#include <stdio.h>
#include <conio.h>
#include <string.h>
int supprime_repetition (char txt[])
{int i, j;
for (i=0; i<strlen(txt); i++)
{if (txt[i] == txt[i+1])
{for (j=i; j<strlen(txt); j++)
{txt[j] = txt[j+1];}
i--;}}
return i;
}
main()
{char txt[50];
printf("entrez une texte (de -50 caractères)\n");
gets(txt);
printf("%s %d\n",txt,supprime_repetition(txt));
getch();
return 0;
}
dans tout les cas merci beaucoup loupius pour votre aide et si vous vouliez me contacter et je souhaite le faire pour vous dire merci mon email c : tariktrk@hotmail.com
car si je lui donne 3 de même caractère il efface seulement 1 et il laisse les deux donc il dois toujours retourner a la au la valeur de i qui était la cause chaque fois il entre dans la boucle if
voila c fais et mon dernier mots c
N.B je ne sais si j ai bien fais comprendre le message mais ca c est le programme
#include <stdio.h>
#include <conio.h>
#include <string.h>
int supprime_repetition (char txt[])
{int i, j;
for (i=0; i<strlen(txt); i++)
{if (txt[i] == txt[i+1])
{for (j=i; j<strlen(txt); j++)
{txt[j] = txt[j+1];}
i--;}}
return i;
}
main()
{char txt[50];
printf("entrez une texte (de -50 caractères)\n");
gets(txt);
printf("%s %d\n",txt,supprime_repetition(txt));
getch();
return 0;
}
dans tout les cas merci beaucoup loupius pour votre aide et si vous vouliez me contacter et je souhaite le faire pour vous dire merci mon email c : tariktrk@hotmail.com