Programmaton c

seif -  
 amie_ccm -
Bonjour,
comment retourner le longueur d'une chaine de caractère sans utiliser la fonction prédéfinis "strlen"
Configuration: Windows XP
Internet Explorer 7.0

4 réponses

  1. amie_ccm
     
    salut..
    alors compter caractere par caractere..
    cdlt
    0
  2. seif
     
    nn c pas ca mé comment utilisre les pointeurs pr faire ca svp
    0
    1. amie_ccm
       
      sous quel langage?
      0
  3. seif
     
    langage c
    0
    1. amie_ccm
       
      voici cette solution, mais j'ai pas utiliser les pointeurs
        #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..
      0
      1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > amie_ccm
         
        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.
        0
  4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut,
    Teste :
    #include <stdio.h>
    
    int main(void){
        char buf[]="coucou";
        char *p=buf;
        while(*p++);
        printf("longueur : %d\n",p-buf-1);
        return 0;
    }
    
    
    0
    1. amie_ccm
       
      salut fiddy
      STP peut tu m'expliquer ton pgm?
      au faite je l'ai execucter chez moi avec une execution "pas à pas" mais lorsque je consulte
      les valeurs finales de buf et p je l'ai trouve pas des entier
       p-buf-1 

      merci d'avance
      cdlt
      0
      1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > amie_ccm
         
        Je commente les étapes importantes :
        
        #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
        0
      2. amie_ccm > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        tu veux dire que:

        p=(buf + strlen(buf) + 1 (\0) ) 


        malheureusement j'ai pas compris....je suis novice....
        en tt cas merci
        cdlt
        0
      3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > amie_ccm
         
        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
        0
      4. amie_ccm > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        je te remercie fiddy
        maintenant c trop clair
        cdlt
        0