transformer une chaine de caracteres en C

transformer une chaine de caracteres en C - Programmation

Marsh Posté le 23-01-2002 à 15:26:45    

Voilà, supposons que j'ai ce tableau :  
 
mot[40] = {'B','o','n',
'j','o','u',&#
039;r',' ',' ',' ',' ',' ','\0'}  
 
si je fais :  
 
longueur = strlen(mot);  
 
j'obtiendrais longueur = 12 , n'est ce pas ...  
Mais moi je veux enlever les espaces à la fin du mot ..  
 
je veux le couper et ne garder que les valeurs du tableau où il y a des lettres ...  
 
je veux transformer donc mot[40] = {'B','o','n',
'j','o','u',&#
039;r',' ',' ',' ',' ',' ','\0'} en mot[40] = {'B','o','n',
'j','o','u',&#
039;r','\0'}  
 
Comment faire ?  
 
merci beaucoup pour votre aide..

Reply

Marsh Posté le 23-01-2002 à 15:26:45   

Reply

Marsh Posté le 23-01-2002 à 16:05:18    

y'a deux fonction sympa  
char *strchr(const char *s, int c);  
te retourne un pointeur sur le premier c trouve
                                     
char *strrchr(const char *s, int c);
te retourne un pointeur sur le dernier c trouve
 
et pour tes espace ba tu cherches le premier espace tu chopes un pointeur dessus et tu fait une copi de ta chaine jusqu'au pointeur et le tours est joue

Reply

Marsh Posté le 23-01-2002 à 16:12:25    

j'essaye ...
 
Merci !

Reply

Marsh Posté le 23-01-2002 à 16:15:18    

En partant de la fin, on cherche en boucle l'espace, tant que y en a un, on recule d'un cran. Quand y a plus, on met alors le '\0' à cet endroit incrémenté de 1. On aura tj 40 cases, mais l'indicateur de fin de chaîne sera bien placé.

Reply

Marsh Posté le 23-01-2002 à 16:40:40    

j'ai une erreur ..
 
longtab(char mot[])
{
 int nb_char;
 int pos=0;
 char lemot[MAXLONG]; //MAXLONG = 40
 
 while (mot[pos] != ' ';)
  {
   lemot[pos]=mot[pos];
   pos++;
  }
 nb_char = strlen(lemot);
 return lemot[];
}
 
depuis que j'ai inséré ce script j'ai une erreur des l'execution du programme ...  
erreur du genre : "Erreur Programme Ok? déboguer? fermer ?"

Reply

Marsh Posté le 23-01-2002 à 16:48:22    

* while (mot[pos] != ' ';)  
 
déjà, tester si mot != null
 
* return lemot[];  
 
tu retournes une variable temporaire qui est détruite au sortir de la fonction.

Reply

Marsh Posté le 23-01-2002 à 19:18:56    

youdont..>
 
-return lemot
 
Je suis pas sur que ca pose probleme... en tout cas je vois pas pourkoi.

Reply

Marsh Posté le 23-01-2002 à 19:49:49    

trictrac a écrit a écrit :

Je suis pas sur que ca pose probleme... en tout cas je vois pas pourkoi.


c'est une variable temporaire, allouée sur la pile. je ne te demande pas de me croire, regarde les faits : teste, observe le code compilé, etc.
 
*boum*

Reply

Marsh Posté le 23-01-2002 à 23:52:21    

tu peut faire une petite fonction renvoie le nombre de caracteres.
Ton message peut contenir des espaces.
on part de la fin du tableau .
 
tu peut aussi mettre a jour le '\0'
 
int long_chaine(char *c) {
 
        int lg_chaine ;
 char *index ;
 
 if (c != null) {
  lg_chaine = strlen(c);  
  index = c + lg_chaine + 1 ; /* index pointe sur le \0 */  
  do { index -- } while (*index == ' ';);
  /* s'arrette sur le premier car rencontre a partir de la fin */
  // si tu veux mettre a jour le caractere terminal :
  // *(index+1) = '\0';
 
  return index-c ;  
 }      
}
 
bon courage !
 
ps : pour le retour de machin[] c'est bon il faut
juste declarer ta fonction non pas en void mais en
*char. (pointeur sur le tableau)
 
voila.....

Reply

Marsh Posté le 23-01-2002 à 23:54:38    

:ange:  :ange:  :ange:  :ange:

Reply

Marsh Posté le 23-01-2002 à 23:54:38   

Reply

Marsh Posté le 24-01-2002 à 00:15:59    

Merci ..pour les encouragements [:atog]

Reply

Marsh Posté le 24-01-2002 à 07:42:50    

ha au fait ya une chtite erreur dans mon code...
avant la derniere } il faut mettre : return -1
 
int lg = long_chaine(chaine);
if (lg <0) { printf("chaine non instanciée." ) } else
{ printf ("longueur chaine : %d",lg); };
 
voila ...
 
(c'est koi qui passe pas ?? le principe est super simple.
recherche un cours sur les pointeurs si tu comprend pas le principe.)

Reply

Marsh Posté le 24-01-2002 à 10:15:48    

youdontcare a écrit a écrit :

* while (mot[pos] != ' ';)  
 
déjà, tester si mot != null
 
* return lemot[];  
 
tu retournes une variable temporaire qui est détruite au sortir de la fonction.  




 
et surtout, une fonction ne rend JAMMAIS un tableau. c comme ça.
tu peux rendre un pointeur vers un tableau (lemot), c tout.

Reply

Marsh Posté le 24-01-2002 à 10:43:05    

[citation]
 
(c'est koi qui passe pas ?? le principe est super simple.
recherche un cours sur les pointeurs si tu comprend pas le principe.)  
[/citation]
 
C'est depuis juste 2 jours que je code en C
et j'avais urgemment besoin de trouver une astuce pour ça ..
 
Merci pour les réponses ...

Reply

Marsh Posté le 24-01-2002 à 14:28:33    

de rien
et bon courage !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed