Chaine de caractères

Résolu/Fermé
Istabandal Messages postés 2 Date d'inscription dimanche 15 décembre 2013 Statut Membre Dernière intervention 15 décembre 2013 - 15 déc. 2013 à 20:00
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 déc. 2013 à 15:59
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 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
Modifié par gravgun le 15/12/2013 à 20:17
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 dimanche 15 décembre 2013 Statut Membre Dernière intervention 15 décembre 2013
15 déc. 2013 à 20:13
votre proposition
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
15 déc. 2013 à 20:16
"votre proposition": Ma proposition? Qu'est-ce qu'elle a ma proposition?
0
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
18 déc. 2013 à 15:59
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