Programmation en C
solomon83
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
solomon83 Messages postés 17 Date d'inscription Statut Membre Dernière intervention -
solomon83 Messages postés 17 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis débutant en programmation en C, et on voit les chaînes de caractères pour l'instant.
Récemment on avait une interro à faire que j'ai échouée...Mais je voulais faire l'exercice pour comprendre.
Le but du programme est de trouver les espaces erronés et ceux mis en trop.
La phrase donnée: "PE TIT PIE RRE POSSE DE UN CANARD DE COULE UR BLANCHE"
1. Effacer les espaces erronés.
2. Trouver les espaces mis de trop et d'en remplacer un par astérisques (*).
J'ai réussi à effacer les espaces mis en trop, mais je n'arrive pas à faire remplacer le deuxième espace mis en trop par un astérisque...
Voici mon code:
Et voici un screenshot du résultat final:
<img src="http://img203.imageshack.us/img203/9219/exercice.png" alt="Image Hosted by ImageShack.us"/><br/>By <a target="_new" href="https://imageshack.com/user/null">null</a> at 2011-03-08
Je suis débutant en programmation en C, et on voit les chaînes de caractères pour l'instant.
Récemment on avait une interro à faire que j'ai échouée...Mais je voulais faire l'exercice pour comprendre.
Le but du programme est de trouver les espaces erronés et ceux mis en trop.
La phrase donnée: "PE TIT PIE RRE POSSE DE UN CANARD DE COULE UR BLANCHE"
1. Effacer les espaces erronés.
2. Trouver les espaces mis de trop et d'en remplacer un par astérisques (*).
J'ai réussi à effacer les espaces mis en trop, mais je n'arrive pas à faire remplacer le deuxième espace mis en trop par un astérisque...
Voici mon code:
#include <stdio.h> #include <stdlib.h> #include <string.h> // 1ère partie: Ecrire un programme qui reconstruit une phrase correcte (nouvelle chaîne) // 2ème partie: Reprendre la chaîne originale (avec les espaces erronés après le "E") // et remplacer par astérisque (*) les espaces normaux qui ont été // posés après les espaces erronés qui suivent le "E". main () { char chaine1[70] = "PE TIT PIE RRE POSSE DE UN CANARD DE COULE UR BLANCHE"; char chaine2[70]={0}; int i = 0, j = 0, longueur; // L'initialisation des variables longueur = strlen(chaine1); // affectation de la variable "longueur" par la longueur de la chaîne while (i <= (longueur-1)) // tant qu'on n'est pas à la fin de la chaîne1 { if (chaine1[i] == ' ' && chaine1[i-1] == 'E') // si en rencontre un espace et que le caractère qui le précède est un "E" { chaine2[j] = chaine1[i+1]; i = i + 1; } else { if (chaine1[i]==' ' && chaine1[i+1]== ' ') { chaine2[j]=='*'; i=i+1; j=j+1; } else { chaine2[j] = chaine1[i]; i = i + 1; j = j + 1; } } } chaine2[j] = 0; // le zéro terminal puts (chaine2); // on affiche la chaine2 system("PAUSE"); return(0); }
Et voici un screenshot du résultat final:
<img src="http://img203.imageshack.us/img203/9219/exercice.png" alt="Image Hosted by ImageShack.us"/><br/>By <a target="_new" href="https://imageshack.com/user/null">null</a> at 2011-03-08
A voir également:
- Programmation en C
- Application de programmation - Guide
- Mettre en veille un programme - Guide
- Programmer en basic sous windows 10 - Télécharger - Édition & Programmation
- Un autre programme est en cours d'installation - Forum Windows 10
- Programmation envoi sms - Guide
1 réponse
Bonjour,
le while (i <= (longueur-1)) ce qui vous force à faire un -1 c'est parce que vous utilisez "<=", utilisez simplement (i<longueur). Vous allez vous perdre avec toutes les conditions aidez vous des positions, j'ai du mal à expliquer testez ça :
le while (i <= (longueur-1)) ce qui vous force à faire un -1 c'est parce que vous utilisez "<=", utilisez simplement (i<longueur). Vous allez vous perdre avec toutes les conditions aidez vous des positions, j'ai du mal à expliquer testez ça :
/* for(initialisations;tests;incrementations) */ for(i=j=0;i<longueur;i++,j++) { /* passe un char si mauvais espace */ if(chaine1[i]==' '&&chaine1[i-1]=='E')i++; /* si deux espaces */ if(chaine1[i]==' '&&chaine1[i-1]==' ') { /* le premier est ok */ chaine2[j]=' '; /* remplace le second */ chaine2[j+1]='*'; /* incremente alors j de 2, et i de 1 */ j+=2; i++; } /* copie des caracteres de la chaine */ chaine2[j]=chaine1[i]; }
solomon83
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
2
Bonjour. Oui effectivement ton code marche très bien. Mais à vrai dire je n'ai pas compris "comment ça marche". Il y a quelque chose qui m'échappe. Tu n'aurais pas un quart d'heure un jour pour m'expliquer tout ça sur skype (ou autre) par hasard? Je te remercie pour ton aide.