IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Suppressions des caracteres en double dans une chaine


Sujet :

C

  1. #1
    Nouveau membre du Club

    Inscrit en
    Juin 2002
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1
    Points : 25
    Points
    25
    Par défaut Suppressions des caracteres en double dans une chaine
    Hello tout le monde !!

    Je veut créer un programme ( ou plutot une fonction !! ) qui me pemettrer d'enlever les caracteres qui sont en doubles ou plus dans une chaine de caractere et la copier dans une autre chaine de caractere ! ( mais bon pour la copie je sais le faire : c'est avec strcpy ou strcat !! )

    Je vous serez reconnaissant de m'aider et le plus explicitement !!!

    MERCI !!!!

    moi ---> ( en ce moment !! )
    TOUT CE QUI EST CONSTRUIT PAR L'HOMME PEUT ETRE HACKER PAR L'HOMME !!

  2. #2
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 22
    Points : 43
    Points
    43
    Par défaut
    un truc comme ça :

    c'est un truc vite fait qui peut être optimisé mais ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    void elimine_doublons(char *chaine) {
    	char *ptrcar, *ptrsearch, *ptrsrc, *ptrdest;
     
    	ptrcar = chaine;
    	while(*ptrcar) {
    		ptrsearch = ptrcar + 1;
    		while(*ptrsearch) {
    			if(*ptrsearch == *ptrcar) {
    				ptrsrc = ptrdest = ptrsearch;
    				ptrsrc++;
    				while(*ptrsrc) {
    					if(*ptrsrc != *ptrcar) {
    						*(ptrdest++) = *(ptrsrc++);
    					} else {
    						ptrsrc++;
    					}
    				}
    				*ptrdest = '\0';
    			}
    			ptrsearch++;
    		}
    		ptrcar++;
    	}
    }
    Pour les explications suivre des tutoriels et cours pour apprendre la programmation en langage C : http://c.developpez.com/cours/

  3. #3
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 22
    Points : 43
    Points
    43
    Par défaut
    razor,

    Ce programme fonctionne parfaitement, je l'ai réalisé (vite fait, il est vrai !) et testé lorsque tu à posté ta requête Mercredi 5 juin.

    Tu n'as pas précisé la plate-forme que tu utilisais et comme je programme sous GNU/Linux, je l'ai donc réalisé sous cet environnement avec le compilateur gcc et je n'ai pas essayé de le porter sous Windows avec un autre compilateur.

    Cependant, je serais étonné qu'il n'y fonctionne pas puisqu'il ne fait appel qu'à du code C standard et n'utilise aucune bibliothèque (qui pourrait avoir des spécificités différentes d'une plate-forme à l'autre).

    Je le testerai sous Windows avec VC++, par acquit de conscience, et je reviendrais te dire si j'ai eu des quelque difficulté que ce soit.

  4. #4
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 22
    Points : 43
    Points
    43
    Par défaut
    Me re-voilà !

    J'ai donc testé comme promis avec VC++ sous Windows et ça fonctionne également parfaitement. (le contraire m'aurait étonné).

    Cela-dit, cette fonction à été ecrite en C et prend comme argument un pointeur de char.

    Sous VC++, il existe une classe de chaîne de caractères du nom de CString qui offre un certain confort dans le traîtement des chaînes de caractères.

    J'ai donc écris une méthode qui prend en argument une CString avec un passage par référence et biensûr, je l'ai également testée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    void CDoublonsDoc::elimine_doublons(CString &string)
    {
    	int car, search;
     
    	car = 0;
    	while(car < string.GetLength() - 1) {
    		search = car + 1;
    		while(search < string.GetLength()) {
    			if(string.GetAt(search) == string.GetAt(car)) {
    				string.Delete(search);
    			} else {
    				search++;
    			}
    		}
    		car++;
    	}
    }
    Tu peux utiliser les deux fonctions en fonction du type d'argument et elles cohabitent d'ailleurs parfaitement grâce à la surcharge.

    maintenant, un conseil :

    Quand qqun te donne une fonction et que ça ne marche pas, avant de conclure que la fonction est buggée, vérifie d'abord que tu as su l'utiliser. ou alors pose la question : "comment de l'appelle?" !

    Si tu débute en programmation, je peux très bien comprendre que des fois, il est bien commode de demander de l'aide sur un site comme developpez.com, (il est d'ailleurs là pour ça), mais ça ne te dispense pas de te creuser un peu la tête !

    Si on consacre du temps pour répondre à ta demande, la moindre des chose est de ne pas balancer sans plus d'effort te ta part : "ça marche pas ! t'as pas aut'chose ?"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 21/03/2024, 11h05
  2. Verifier si une chaine de caractere est situe dans une chaine de caractere
    Par gregounnet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2007, 15h31
  3. Suppression des 30 premiers caractères d'une chaine
    Par linooo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/06/2007, 16h09
  4. Réponses: 5
    Dernier message: 06/02/2007, 13h46
  5. Ajouter des caractères au milieu d'une chaine
    Par sam.fet dans le forum Linux
    Réponses: 9
    Dernier message: 17/08/2006, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo