begin process at 2012 05 28 14:29:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

boucle sans fin, ou autre...


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

boucle sans fin, ou autre...

mercredi 21 décembre 2005 à 11:56:48 | boucle sans fin, ou autre...

dark_naruto25

Bonjour tout le monde, voilà je fais une fonction semblable à trim() en PHP. Seulement voilà, le programme reste planter au même endroit :

printf("Suppression des caracteres blancs de fin de chaine.\n");
i=taille-1;
while(i>0 &&
            !isAlphaNum(chaine[i]) &&
            !rechCar(caracteres,chaine[i],strlen(caracteres)) )
{
        chaine[i]='\0';
        i--;
}

Le programme affiche le contenue de printf() et c'est tout, il s'arrête là. Et je ne vois pas pouquoi.
svp aider moi... :'(


mercredi 21 décembre 2005 à 12:46:48 | Re : boucle sans fin, ou autre...

vecchio56

Administrateur CodeS-SourceS
Que valent taille, chaine, caractères...?
mercredi 21 décembre 2005 à 13:18:55 | Re : boucle sans fin, ou autre...

dark_naruto25

taille c'est la paramètre passé à la fonction, je mets : sizeof(chaine)/sizeof(char), ce qui en théorie me retourne la taille du tableau de caractère y compris le '\0' de la fin.
chaine c'est la chaine de caractères que je passe à la fonction, c'est cette chaine dont je dois enlevé les ' ' et '\ '. caracteres c'est une chaine contenant les caractères pouvant intervenir dans chaine et qu'il faut préserver.

mercredi 21 décembre 2005 à 13:25:36 | Re : boucle sans fin, ou autre...

dark_naruto25

Non en fait j'ai trouvé où ça plantais, c'est dans la fonction rechCar(...);, y a une boucle sans fin dedans.
Merci quand même de ton attention


mercredi 21 décembre 2005 à 14:29:48 | Re : boucle sans fin, ou autre...

dark_naruto25

Donc voilà ma fonction trim(), il a des fonction à côté :
bool isMaj() // retourne vrai si le caractère est une majuscule
bool isMin() // retourne vrai si le caractère est une minuscule
bool isNum() // retourne vrai si le caractère est un chiffre
bool isAlphaNum() // regroupe l'ensemble des fonctions d'avant
bool rechCar() // recherche le caractère dans la chaine caracteres

void trim(char* chaine,int taille)
{
    char *chaine2 = new char[taille];
    memset(chaine2,0,sizeof(chaine2));
    char caracteres[]="()[]',?.;:/\"-_%éèê#*&@|";
    int i=0,j;
 
    while(i<taille &&
                !isAlphaNum(chaine[i]) &&
                !rechCar(caracteres,chaine[i],strlen(caracteres)) )
    {
            printf("chaine[%d]='%c' (%d)\n",i,chaine[i],chaine[i]);
            chaine[i]='\0';
            i++;
    }
 
    i=taille-1;
    while(i>=0 &&
                !isAlphaNum(chaine[i]) &&
                !rechCar(caracteres,chaine[i],strlen(caracteres)) )
    {
            printf("%s\nchaine[%d]='%c' (%d)\n",chaine,i,chaine[i],chaine[i]);
            chaine[i]='\0';
            i--;
    }
 
    i=0;j=0;
    while(i<taille && j<taille)
    {
        if( chaine[i]!='\0' )
            chaine2[j] = chaine[i];
        i++;j++;
    }
    memset(chaine,0,sizeof(chaine));
    strcpy(chaine,chaine2);
    delete[] chaine2;
}

pour faire simple, la fonction ne marche pas :-)


mercredi 21 décembre 2005 à 14:49:37 | Re : boucle sans fin, ou autre...

Joky

Membre Club
Réponse acceptée !
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void SuppDevant(char *sz)
{
     char Buff[128];
     int Index = 0;
     char *c = sz;
    
     while(*c == ' ')
     {
         Index++;
         c++;
     }
    
     strcpy(Buff, sz+Index);
     strcpy(sz, Buff);
}
    
void SuppDerriere(char* sz)
{
     char *d = sz + strlen(sz);
     d--;
    
     while(*d-- == ' ')       
        *d = 0;
}

void Trim(char *sz)
{
     SuppDevant(sz);
     SuppDerriere(sz);
}

int main(int argc, char *argv[])
{
  char Buff[] = "   Salut les enfants  ";
  Trim(Buff);
  printf("%s", Buff);         
  system("PAUSE");   
  return 0;
}


if(!Meilleur("Joky")) return ERREUR;<

mercredi 21 décembre 2005 à 15:13:31 | Re : boucle sans fin, ou autre...

dark_naruto25

OK, c'est le même principe que je voulais faire, ta boucle dans suppDevant est infie j'ai l'impression. JE vais essayer de mettre ça en oeuvre à ma sauce. merci
Mais pourquoi tu vérifis si le caractère est vide ?

mercredi 21 décembre 2005 à 15:16:44 | Re : boucle sans fin, ou autre...

Joky

Membre Club
c'est pas le caractère vide, c'est un espace

Si le caractère est un espace, alors Index représente le nombre d'espace
ensuite on copie dans Buff, tout sz sauf les Index premiers espaces

Et pour les espaces derrière, on se place à la fin de la chaine, et on fé une marche arrière tant que c'est un espace,
et alors on coupe *d = 0

Voila ;)

if(!Meilleur("Joky")) return ERREUR;<

mercredi 21 décembre 2005 à 15:23:14 | Re : boucle sans fin, ou autre...

Joky

Membre Club
Et non elle n'est pas infinie, parce que si le premier caractère n'est pas un espace, il ne rentre pas dans la boucle, et donc Index = 0, donc il y a bien 0 espace devant ;)

if(!Meilleur("Joky")) return ERREUR;<

mercredi 21 décembre 2005 à 15:24:48 | Re : boucle sans fin, ou autre...

vecchio56

Administrateur CodeS-SourceS
while(*d-- == ' ')      
  *d = 0;

Ca sert a rien de mettre des zeros partout, seul le dernier est important
while(*d-- == ' ');
*d = 0;

Les deux strcpy dans SuppDevant sont pas très efficaces. Il suffit en fait d'avoir le décalage (nombre d'espaces) et de faire
while(*(sz + dec))
{
  *sz = *(sz + dec);
  sz++;
}
*sz = 0;

1 2

Cette discussion est classée dans : fin, boucle, voil, chaine, caracteres


Répondre à ce message

Sujets en rapport avec ce message

Chaine de caracteres !!! [ par mantalotus ] Comment puis-je transformer un chaine de caractères en une chaine de bits et inversement.Merci de votre aide. Pb de reallocation d'un tableau de chaine de caracteres [ par kobee12 ] J'ai un petit probleme. En effet j'ai un tableau defini de la maniere suivante : char* tab[12];Je charge des chaines de caracteres dans mon tableau. E PB de gestion de fichier!!!! [ par kobee12 ] J'ai un probleme avec la boucle qui se trouve en dessous ( do ... while(!feof(fichier)) ).quand on arrive a la fin du fichier il fait une erreur. il n Chaine de caracteres [ par youssef22 ] Bonjour,Je suis entrain d'ecrire un petit programme qui genere a chaque fois un mot, et affiche le mot sous forme de tirets, et demande a l'utilisateu Chaine de caracteres [ par LordBob ] Salut a tous,voila j'ai une question seulement, je ne sais pas trop comment la poser ou plutot l'expliquer... Alors, je vais faire comme je peux... al Troncature à l'unité ou selection de caracteres dans une chaine [ par zelze ] Voila mon problème:Je débute a peine au C++ et j'ai déjà un problème, j'ai besoin de faire la troncature a l'unité d'un nombre, pouvez vous m'aider?Ou Envoyer une chaine de caracteres a une autre appli [ par fredcpp ] Bonjour,Je cherche a envoyer une chaine de caractere depuis mon programme vers une appli windows ( notepad par exemple ).Tout ca de facon a ce que l'a Chaine de caracteres aléatoire [ par winwarrior ] Bon voila je voudrai simplement que ce code retourne une chaine de caracteres aléatoire je comprend pas ce qui cloche nlors de la compilation ça me ma Pb avec fonction retournant chaine de caractères [ par dragon3x6 ] Bonjour,peut - on retourner une chaine de caracteres avec une fonction ?j'ai ecris une fonction qui renvoie une chaine de caracteres du type 'char cha copier nombre dans chaine de caracteres?? [ par dletozeun ] bonjour,Je cherche une fonction capable de copier un entier dans une chaine de caracteres et une autre fonction capable de transformer une chaine de c


Nos sponsors


Sondage...

Comparez les prix

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 : 5,881 sec (4)

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