Pb Chaîne de caractères

mmuller57 Messages postés 174 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 30 juillet 2003 - 23 févr. 2002 à 00:55
mmuller57 Messages postés 174 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 30 juillet 2003 - 27 févr. 2002 à 22:10
Bonjour,

J'ai créé un petit programme qui convertit les caractères d'une chaîne de caractères par leurs codes ASCII :

#include

#include <stdlib.h>
#include <string.h>

int convert(char* string);

void main()
{
cout
<< convert("abcABC") << endl;

system("PAUSE");
}

int convert(char* string)
{
int n, i = 0;

for(i=0; i < strlen(string); i++)
{
cout
<< (n=(int)string[i])<< endl;
}
}

Voila ce que le programme me donne à l'écran :

97
98
99
65
66
67
6
Appuyez sur une touche pour continuer...

Mon problème, c'est le 6 qui s'affiche (il indique la longueure de la chaîne de caractères) et je ne comprend pas pourquoi il s'affiche, si quelqu'un peut m'aider ça serait gentil ! @+
A voir également:

3 réponses

NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
23 févr. 2002 à 22:51
Bien pour commencer si tu veux connaître la longeur réel d'une chaine(sans compter le caractère de fin de chaine(0)) en utilisant strlen(); ben fait comme ceci:

int len = (strlen(la_chaine) - 1);

for (int i = 0; i <= len; i++)
{

// ton code

}

strlen(); nous retourne la longeur d'une chaine mais compte aussi le caractère de fin de chaine(\0) même si plusieurs dise le contraire ...

En passant si tu veux optimiser un peu ben ne met pas strlen() dans ton for() car il est appeler à chaque tour de t'as boucle, alors il recalcule la longeur de la chaine à chaque tour!

C'était le conseil du jour héhé :P

NitRic28@Hotmail.com
0
Croqmort Messages postés 95 Date d'inscription mercredi 5 décembre 2001 Statut Membre Dernière intervention 27 juin 2006
24 févr. 2002 à 22:16
strlen renvoi le nombre de caractere d'une chaine sans compter le caractere null final donc en fait
strlen("bonjour") renvoi 7
aprés tu fait
for (int i = 0; i <= len; i++)
donc il commence à 0 et va faire 8 tour car il va aller de 0 à 7 avec 7 compris
donc en fait il faut mieux faire :

int len = strlen(la_chaine);

for (int i = 0; i < len; i++){

// ton code

}

et pour le prob de mmuller57, je ne comprend pas d'où vien le probleme.
je te conseil de decompose au maximum pour y voir plus clair et execute pas à pas, tu trouvera surement le probleme
0
mmuller57 Messages postés 174 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 30 juillet 2003 1
27 févr. 2002 à 22:10
Voila le code corrigé pour les curieux, voyez les changements :

#include
#include <stdlib.h>
#include <string.h>

void convert(char* string);

void main()
{
convert("abcABC");

system("PAUSE");
}

void convert(char* string)
{
int i, n;
i = 0;

for(i=0; i < strlen(string); i++)
{
cout
<< (n =((int)string[i])) << endl;
}
}
0
Rejoignez-nous