transformer une chaine de caracteres en C - Programmation
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
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é.
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 ?"
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.
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.
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*
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.....
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.)
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.
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 ...
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..