4 réponses
langage c
voici cette solution, mais j'ai pas utiliser les pointeurs
cdlt..
#include <stdio.h> #include <conio.h> main(void) { clrscr(); char *mot; int i,longueur; printf("entrer le mot : "); scanf("%s",mot); i=0; while(mot[i]!='\0') { i++; } longueur=i; printf("la longueur du mot %s est: %d",mot,longueur); getch(); return 0; }
cdlt..
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
>
amie_ccm
16 nov. 2008 à 21:56
16 nov. 2008 à 21:56
Salut,
mais j'ai pas utiliser les pointeurs
Bah si, tu as utilisé les pointeurs.
Et, il ne faut pas oublier l'allocation. Ensuite, scanf, stocke '\n', donc erreur d'un caractère.
mais j'ai pas utiliser les pointeurs
Bah si, tu as utilisé les pointeurs.
Et, il ne faut pas oublier l'allocation. Ensuite, scanf, stocke '\n', donc erreur d'un caractère.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
16 nov. 2008 à 21:25
16 nov. 2008 à 21:25
Salut,
Teste :
Teste :
#include <stdio.h> int main(void){ char buf[]="coucou"; char *p=buf; while(*p++); printf("longueur : %d\n",p-buf-1); return 0; }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
>
amie_ccm
16 nov. 2008 à 22:03
16 nov. 2008 à 22:03
Je commente les étapes importantes :
Après le while : p-buf-1 = (buf + strlen(buf) + 1 (\0) ) - buf - 1 = strlen(buf).
Et c'est normal que que p et buf ne contiennent pas de petites valeurs vu que ce sont des adresses mémoires.
Cdlt
#include <stdio.h> int main(void){ char buf[]="coucou"; //initialisation de buf avec "coucou". char *p=buf; // pointeur p sur le début de buf (donc sur le 'c') while(*p++); // tant que l'élément pointé est différent de '\0', j'incrémente le pointeur. Donc on va parcourir buf printf("longueur : %d\n",p-buf-1); //p contient l'adresse mémoire du dernier élément de buf. Il faut donc faire la différence. return 0; }
Après le while : p-buf-1 = (buf + strlen(buf) + 1 (\0) ) - buf - 1 = strlen(buf).
Et c'est normal que que p et buf ne contiennent pas de petites valeurs vu que ce sont des adresses mémoires.
Cdlt
amie_ccm
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
16 nov. 2008 à 22:14
16 nov. 2008 à 22:14
tu veux dire que:
malheureusement j'ai pas compris....je suis novice....
en tt cas merci
cdlt
p=(buf + strlen(buf) + 1 (\0) )
malheureusement j'ai pas compris....je suis novice....
en tt cas merci
cdlt
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
>
amie_ccm
16 nov. 2008 à 22:23
16 nov. 2008 à 22:23
Oui exactement.
Expliquer autrement, ceci donne :
J'utilise un pointeur sur le début de la chaîne de caractère.
Et je l'incrémente jusqu'à ce que je tombe sur le \0.
La différence donne donc le nombre d'itérations de la boucle while, c'est-à-dire la longueur de la chaîne (à un près, coup du \0).
J'aurais pu utiliser une variable longueur et faire une incrémentation dans la boucle while.
Ca aurait donné pareil.
J'espère que c'est plus clair.
Cdlt
Expliquer autrement, ceci donne :
J'utilise un pointeur sur le début de la chaîne de caractère.
Et je l'incrémente jusqu'à ce que je tombe sur le \0.
La différence donne donc le nombre d'itérations de la boucle while, c'est-à-dire la longueur de la chaîne (à un près, coup du \0).
J'aurais pu utiliser une variable longueur et faire une incrémentation dans la boucle while.
Ca aurait donné pareil.
J'espère que c'est plus clair.
Cdlt
amie_ccm
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
16 nov. 2008 à 22:26
16 nov. 2008 à 22:26
je te remercie fiddy
maintenant c trop clair
cdlt
maintenant c trop clair
cdlt