Chaine de caractères
Résolu
Istabandal
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
salut, je n'arrive pas à gérer l'es espaces dans mon programme de convertir les majuscule en minuscule et vise versa mais il ne saute pas les espaces et il ne modifie que les premières lettres ensemble quand il arrive à un espace, il s'arrete. comment géré les espaces!!
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
void conversion(char *ch1, char *ch2)
{
int i;
for(i=0; i<strlen(ch1); i++)
{
ch2[i]=ch1[i];
if(ch2[i]>='A' && ch2[i]<='Z')
{
ch2[i]+=32;
}
else if(ch2[i]>='a' && ch2[i]<='z')
{
ch2[i]-=32;
}
else
{
ch2[i]=ch1[i];
i++;
}
}
ch2[i]=0;
}
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
void conversion(char *ch1, char *ch2)
{
int i;
for(i=0; i<strlen(ch1); i++)
{
ch2[i]=ch1[i];
if(ch2[i]>='A' && ch2[i]<='Z')
{
ch2[i]+=32;
}
else if(ch2[i]>='a' && ch2[i]<='z')
{
ch2[i]-=32;
}
else
{
ch2[i]=ch1[i];
i++;
}
}
ch2[i]=0;
}
A voir également:
- Chaine de caractères
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Plus de chaine tv - Guide
- Chaine radio - Télécharger - Médias et Actualité
2 réponses
Salut, avec l'indentation (décalage du code) l'erreur devient beaucoup plus simple à repérer:
Dans ton
from human import idiocy
del idiocy
void conversion(char *ch1, char *ch2) { int i; for(i=0; i<strlen(ch1); i++) { ch2[i]=ch1[i]; printf("%d ", i); if(ch2[i]>='A' && ch2[i]<='Z') { ch2[i]+=32; } else if(ch2[i]>='a' && ch2[i]<='z') { ch2[i]-=32; } else { ch2[i]=ch1[i]; i++; } } ch2[i]=0; }
Dans ton
else,
ch2[i]=ch1[i];est inutile vu que tu l'as déjà fait avant, et
i++;fait avancer i de trop, i augmente déjà à chaque passage dans la boucle (à la fin d'une itération), donc tu rates la lettre suivante, donc ne la copies pas, et comme la zone mémoire où le caractère copié est remplie de
'\0'au départ, et que
'\0'marque la fin d'une chaîne, elle "s'arrête" ici (mais il y a encore du texte après).
from human import idiocy
del idiocy
votre proposition
j'ai vu l'erreur!! la condition sur les espaces ne sert à rien. le problème était juste que 'scanf'() considère l'espace comme la fin de la chaine de caractère. alors que tous ça est géré par gets() car cette fonction considère comme fin de la chaine de caractère que lorsque l'utilisateur tape sur entrer(enter)!!
Attention, gets() est obsolète et ne doit pas être utilisé. Il faut plutôt utiliser fgets(). Note bien également qu'avec cette fonction, il y a un caractère en plus en fin de chaîne (si la chaîne est assez grande pour le contenir bien sûr) : le saut de ligne '\n'. A supprimer donc si tu n'en veux pas.