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   -
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;
}
A voir également:

2 réponses

ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
Salut, avec l'indentation (décalage du code) l'erreur devient beaucoup plus simple à repérer:
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
0
Istabandal Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
votre proposition
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
"votre proposition": Ma proposition? Qu'est-ce qu'elle a ma proposition?
0
istamushetu
 
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)!!
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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.
0