begin process at 2012 05 30 04:23:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

suppression caractère


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

suppression caractère

mardi 9 mars 2010 à 23:34:37 | suppression caractère

fadiam

bonsoir.

une fonction lisant une chaine de caractères n'accepte que les caractères entre '0' et '9' (chiffres) et les ',' '-' '.' et ' '.
Si il y a des caractères inconnus, ils sont supprimés. c'est mon but.

voici ce que j'ai fait. vous pouvez l'essayer pour voir le problème, ce ne sont pas tous les caractères qui sont supprimés.
Code C/C++ :
    while(chaine[i])
    {

        if( (chaine[i]<'0' || chaine[i]>'9') && (chaine[i]!=' ' && chaine[i]!=',' && chaine[i]!='.' && chaine[i]!='-') )
        {
             for(j=i;chaine[j];j++)
            {
                chaine[j]=chaine[j+1];
            }
        }
        i++;

    }


merci a vous.

mercredi 10 mars 2010 à 08:10:35 | Re : suppression caractère

tpoinsot

Bonjour,
il n'est pas capable de supprimer 2 (ou plus) caractères erronnés consécutifs, car tu supprimes le caractères et tu passes à i++.
Si chaine[i] est supprimé, il est remplacé par chaine[i+1] puis tu passes au caractère suivant sans vérifier le nouvel arrivant.
mercredi 10 mars 2010 à 09:23:17 | Re : suppression caractère

BruNews

Administrateur CodeS-SourceS
Pourquoi tu insistes avec cet itérateur (i) inutile ???
Je t'ai deja donné le modele dans ta question précédente, essaie d'adapter.
Quand tu auras essayé, je corrigerai.

ciao...
BruNews, MVP VC++
jeudi 11 mars 2010 à 22:43:35 | Re : suppression caractère

fadiam

Code C/C++ :
 while(chaine[i])
    {

        if( (chaine[i]<'0' || chaine[i]>'9') && (chaine[i]!=' ' && chaine[i]!=',' && chaine[i]!='.' && chaine[i]!='-') )
        {
             for(j=i;chaine[j];j++)
            {
                chaine[j]=chaine[j+1];
            }
        }
        else
            i++;
    }


Voici une modification. A présent, cela fonctionne. Mais je ne sais pas si c'est "propre". Enfin je ne sais pas si c'est une manière académique!
pouvez vous me donner vos avis?
merci.
jeudi 11 mars 2010 à 23:12:33 | Re : suppression caractère

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
Si vraiment tu tiens à ce que tes codes amusent le CPU, tu le dis et je n'insisterai plus.

// ACCEPTER ('0' : '9'), ',', '-', '.' et ' '
// DONC: 32, 44, 45, 46, 48<=>57
char* supprChrs(char *psz)
{
char *d = psz, a;
while(a = *psz) {
if(a > '9') goto nextCHR; // ILLICO ON VIRE
if(a >= '0') goto okCHR; // TOUTE CETTE PLAGE OK
if(a > '.') goto nextCHR;
if(a >= ',') goto okCHR; // ',', '-' et '.' OK EN 1 EVALUATION
if(a != ' ') goto nextCHR; // NE RESTAIT QUE ESPACE
okCHR:
*d++ = a;
nextCHR:
prev = a;
psz++;
}
*d = 0;
return d;
}



ciao...
BruNews, MVP VC++
jeudi 11 mars 2010 à 23:37:37 | Re : suppression caractère

fadiam

je ne comprends pas. En fait je ne vois vraiment pas de quoi tu parle. Quel est le défaut ?
vendredi 12 mars 2010 à 08:24:52 | Re : suppression caractère

tpoinsot

Réponse acceptée !
Tu as passé la première étape, qui est de coder correctement le problème. Ca fonctionne, et sans se planter.
BruNews te montre comment coder efficacement en utilisant le minimum de ressources machines, avec des pointeurs.
Pour commencer, utiliser un tableaux en le parcourant d'un bout à l'autre dans un seul sens se fait très simplement :
Code C/C++ :
char *p = chaine;
while ( *p ) {
  ...
  p++;
}


alors qu'à chaque fois que tu utilise chaine[i], le compilateur :
- prends l'adresse de chaine
- ajoute i fois la taille d'un élément (ici, c'est le caractère, taille 1 a priori)
- retourne le caractère se trouvant à l'adresse trouvée.

Ok ?

Ensuite, il sait que la chaine ne peut que réduire. Tu fais une boucle à chaque suppression de caractère, BruNews se contente d'utiliser un second pointeur qui ne s'incrémente que lorsque le caractère est bon, en le copiant au passage.

Là, je vais taquiner un peu :
- l'affectation de prev bouffe de la cpu pour rien.
- ça ne fonctionne pas en EBCDIC

vendredi 12 mars 2010 à 10:47:34 | Re : suppression caractère

fadiam

OK merci. c'est vrai que je ne pense à passer par des pointeurs.
vendredi 12 mars 2010 à 12:42:52 | Re : suppression caractère

BruNews

Administrateur CodeS-SourceS
prev = a;
est un restant (copier coller) du code de la question précédente, il est clair qu'il est à enlever.
D'ailleurs le code ne compilerait pas.

ciao...
BruNews, MVP VC++
vendredi 12 mars 2010 à 13:50:29 | Re : suppression caractère

tpoinsot

Bien sûr BruNews, et je parlais de taquinerie !
Mais il fallait laisser fadiam y réfléchir.
Bah, il lui reste le gag de l'EBCDIC.


Cette discussion est classée dans : caractère, chaine, suppression, caractères, supprimés


Répondre à ce message

Sujets en rapport avec ce message

HELP...chaine de caractères....en C..défi TP [ par SniPi ] Voici un exercice bien sympatique à faire en C.Je vous passerez le corrigé de ce TP mercredi prochain, en attendant j'aimerais voir ce que vous pensez transformer un caractère en une chaine de caractères [ par zarce ] bonjour j'utilise une fonction qui affiche à l'écran (graphique) des chaines de caractères la syntaxe est du style ...DrawString(posX,posY, chaine de Trouver l'indice d'un caractère dans une chaine de caractères [ par new0staff ] Bonjour tout le monde!Je cherche une fonction qui me permet de trouver l'indice d'un caractère dans une chaine de caractère.J'ai utilisé une boucle qu tronquer une chaine de caractère [ par gilleswathelet ] bonjour, je programme un p'tit peu en C et j'aimerais savoir s'il est possible, a partir d'une chaine de caractères pouvant comporter jusqu'à 60 carac concaténer un caractère a une chaine de caractères [ par deck_bsd ] Bonjour, voila g un petit problem, ds mon programe je converti un int en char, mais apres je veu le concaténer en faisant strcat(chaine_de_caract,car Chaines de caractères [ par Roro8883 ] Salut,je suis complètement perdu et embrouillé dans les chaînes de caractères en C++ !!!!Comment est-ce que je peux faire pour savoir, dans une chaine les chaines de caractères dans C [ par hzocm ] Bonjour, Je voudrais copier un fragment de la chaine A, comment faire?? ex: A = hello, je suis une chaine je veux copier de la position 3 à 5 --> j'a Petit programme de chaine de caractère [ par trystan007 ] J'ai un petit problème : l'utilisateur doit taper une chaine de caractère en mode console, puis, la chaine est envoyée en même tps qu'une 15aine de va Fonction qui renvoie une chaine de caractère [ par tintin72 ] Bonjour,Je voudrais faire une fonction qui renvoie une chaine de caractère. C'est possible ?Si oui comment ?MerciTintin 72 recherche une chaine de caractères dans un fichier [ par Tamahoma ] Bonjour, Je voudrais rechercher une chaine de caractères dans un fichier, il prend le début de cette chaine jusqu'à ce qu'il rencontre le symbole : '>


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales