Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1234 connectés 

  FORUM HardWare.fr
  Programmation

  transformer une chaine de caracteres en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

transformer une chaine de caracteres en C

n°92423
paranoidan​droid
Posté le 23-01-2002 à 15:26:45  profilanswer
 

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..

mood
Publicité
Posté le 23-01-2002 à 15:26:45  profilanswer
 

n°92438
dragonspha​x
Posté le 23-01-2002 à 16:05:18  profilanswer
 

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

n°92443
paranoidan​droid
Posté le 23-01-2002 à 16:12:25  profilanswer
 

j'essaye ...
 
Merci !

n°92448
Carbon_14
Posté le 23-01-2002 à 16:15:18  profilanswer
 

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é.

n°92459
paranoidan​droid
Posté le 23-01-2002 à 16:40:40  profilanswer
 

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 ?"

n°92464
youdontcar​e
Posté le 23-01-2002 à 16:48:22  profilanswer
 

* 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.

n°92561
trictrac
Posté le 23-01-2002 à 19:18:56  profilanswer
 

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

n°92569
youdontcar​e
Posté le 23-01-2002 à 19:49:49  profilanswer
 

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*

n°92682
-Golgotor-
Posté le 23-01-2002 à 23:52:21  profilanswer
 

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.....

n°92684
-Golgotor-
Posté le 23-01-2002 à 23:54:38  profilanswer
 

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

mood
Publicité
Posté le 23-01-2002 à 23:54:38  profilanswer
 

n°92694
paranoidan​droid
Posté le 24-01-2002 à 00:15:59  profilanswer
 

Merci ..pour les encouragements [:atog]

n°92723
-Golgotor-
Posté le 24-01-2002 à 07:42:50  profilanswer
 

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.)

n°92727
El_gringo
Posté le 24-01-2002 à 10:15:48  profilanswer
 

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.

n°92744
paranoidan​droid
Posté le 24-01-2002 à 10:43:05  profilanswer
 

[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 ...

n°92878
-Golgotor-
Posté le 24-01-2002 à 14:28:33  profilanswer
 

de rien
et bon courage !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  transformer une chaine de caracteres en C

 

Sujets relatifs
[C] Pb de taille de chaine de caractère[PHP] Aide sur les chaine de charactere
[PHP]Caractères alphanumériques[PHP] Insérer une chaine au début d'un fichier (clareté inside!)
[VBA] Comment extraire un caractere d'un chaine de type string.ENCORE POUR MON STAGE : Comment couper une chaine en Cold Fusion
[C] Caracteres ASCII dans une chaine[Delphi]c'est quoi la fonction pour completer une chaine?
[ASP]traitement de chaine, probleme !!! 
Plus de sujets relatifs à : transformer une chaine de caracteres en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR