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

  FORUM HardWare.fr
  Programmation
  C

  fonction strlen calcule de la longueur de chaine

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction strlen calcule de la longueur de chaine

n°1979680
lassault1
Posté le 31-03-2010 à 21:24:42  profilanswer
 

Bonjour :D
 
Voila sur le tuto des chaines de caractères il y a cette fonction pour calculer la longueur d'une chaine..
 
Voici le code :
 

Code :
  1. int longueurChaine(const char* chaine)
  2. {
  3.     int nombreDeCaracteres = 0;
  4.     char caractereActuel = 0;
  5.     do
  6.     {
  7.         caractereActuel = chaine[nombreDeCaracteres];
  8.         nombreDeCaracteres++;
  9.     }
  10.     while(caractereActuel != '\0');
  11.     nombreDeCaracteres--;
  12.     return nombreDeCaracteres;
  13. }


 
Donc je voulais modifier ce code pour utiliser une boucle for mais cela fonctionne pas.. :( ou se trouve le problème?)
 
Voici le code modifié :

Code :
  1. int longueurChaine(const char* chaine)
  2. {
  3.     int i;
  4.     char caractereActuel = 0;
  5.    for ( i = 0; caractereActuel != '\0'; i++)
  6. {
  7.      caractereActuel = chaine[i];
  8. }
  9.      return i--;
  10. }

mood
Publicité
Posté le 31-03-2010 à 21:24:42  profilanswer
 

n°1979684
xilebo
noone
Posté le 31-03-2010 à 21:59:12  profilanswer
 

Très simple, ta condition de terminaison du for est que caractereActuel soit égale à 0. Or , tu l'initialises à 0 juste avant. Par conséquent, ta boucle for ne se fait pas.
 
Avec un debugger , tu aurais pu voir ça très facilement.
 
 
Attention par ailleurs, que se passe-t-il si la chaine que tu passes ne contient jamais de caractère '0' , la valeur renvoyée sera incohérente.
 
 

n°1979685
lassault1
Posté le 31-03-2010 à 22:16:34  profilanswer
 

Merci a toi..
 
Et comment corrigé ce code?  
 
Comment faire pour debugger car quand je clique sur ce bouttom rien ne se passe.. j'ai code::block

n°1979880
xilebo
noone
Posté le 01-04-2010 à 11:24:49  profilanswer
 

Il te suffit d'initialiser ta variable caractereActuel à une valeur différente de la condition de terminaison , c'est à dire différente de 0.
 
La différence entre le précédent algorithme et le tien, c'est que dans le premier, la boucle est faite au moins une fois avant de tester la condition de sortie (principe du do-while) , alors que dans le tien, la condition est testée dès le départ de la boucle.
 
 
Pour le debugger, il faut que tu mettes des points d'arrêts (ou breakpoint) sur les lignes sur lesquelles tu souhaites que le debugger s'arrête, pour ensuite exécuter pas à pas les instructions de ton programme.

n°1979927
breizhbugs
Posté le 01-04-2010 à 12:42:47  profilanswer
 

Je me demande si cela ne ferait pas l'affaire aussi:

Code :
  1. int longueurChaine(const char* chaine)
  2. {
  3.     int i;
  4.    for ( i = 0; chaine[i] != '\0'; i++)
  5.       ; 
  6.    return i;
  7. }

n°1980075
lassault1
Posté le 01-04-2010 à 16:34:23  profilanswer
 

Merci a tous c'est ok! tout rentre dans l'ordre... .)
 
Une autre question :
 
Le i++ dans for(i = 0; i < taille; i++) s'incrémente si la condition est vrai ou elle s'incrémente après les instructions (c'est a dire a la fin de la boucle) ?

n°1980114
breizhbugs
Posté le 01-04-2010 à 17:36:56  profilanswer
 

Si tu réfléchis bien, "à la fin de la boucle" suppose que l'on y soit entrée parce que la condition était vrai...

n°1980125
lassault1
Posté le 01-04-2010 à 17:50:52  profilanswer
 

Merci

n°1980178
xilebo
noone
Posté le 01-04-2010 à 20:04:20  profilanswer
 

lassault1 a écrit :

Merci a tous c'est ok! tout rentre dans l'ordre... .)
 
Une autre question :
 
Le i++ dans for(i = 0; i < taille; i++) s'incrémente si la condition est vrai ou elle s'incrémente après les instructions (c'est a dire a la fin de la boucle) ?


 
 
tu peux imaginer le for de la façon suivante :  
 
 
for (X;Y;Z)  
{
T
}
 
équivaut à :
 
X
while (Y)
{
T
Z
}
 
Par exemple :  
 

Code :
  1. int i;
  2. int a = 0;
  3. for (i = 0 ; i < 10 ; i++)  // X;Y;Z
  4. {
  5. a = a+2;  // T
  6. }


 
équivaut à  
 
 

Code :
  1. int i;
  2. int a = 0;
  3. i = 0; // X = initialisation de boucle
  4. while (i < 10) // Y  = condition de sortie
  5. {
  6. a = a+2; // T = ton code
  7. i++; // Z = code de fin de boucle
  8. }


 


Message édité par xilebo le 01-04-2010 à 20:08:57

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

  fonction strlen calcule de la longueur de chaine

 

Sujets relatifs
tranformer une fonction private en publicComparaison de chaine de caractères / Question à la con
chaine avec <br> qui ne passe pas par _GETFonction globale: symbole externe non résolu
Parser une chaine de caractere de longueur variableFonction et Type + Livre VBA
Problème fonction javascriptdecomposer une chaine de caractère[resolut]
Fonction mail() - reception impossible sur une adresse 
Plus de sujets relatifs à : fonction strlen calcule de la longueur de chaine


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