Programmation en C
solomon83
Messages postés
23
Statut
Membre
-
solomon83 Messages postés 23 Statut Membre -
solomon83 Messages postés 23 Statut Membre -
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
- Programmation envoi sms - Guide
- Ce programme est écrit en python il construit un mot secret ✓ - Forum Python
- Programmation binaire - 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
23
Statut
Membre
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.