1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 128
void saisieChaine(char[], char[], size_t, char);
size_t supprimeSousChaineAvecIndices(char [], char[]);
int main(int argc, char *argv[]) {
char ch1[N];
char sousChaine[3];
size_t nb;
saisieChaine("Entrez la chaine originale", ch1, N, 0);
saisieChaine("Entrez la chaine à supprimer", sousChaine, 2, 1);
nb=supprimeSousChaineAvecIndices(ch1, sousChaine);
printf("Nombre de remplacements : %lu\n", nb);
printf("Chaine modifiee : [%s]\n", ch1);
system("PAUSE");
return 0;
}
void saisieChaine(char prompt[], char s[], size_t size, char flag_fixe) {
while (1) {
printf("%s\n", prompt);
printf("Attention, %s %lu caractères\n", flag_fixe ?"obligatoirement" :"pas plus de", size);
fgets(s, size+1, stdin);
char *pt;
if ((pt=strchr(s, '\n')) != NULL) *pt='\0';
else {
int c;
while ((c=fgetc(stdin)) != '\n' && c != EOF);
}
if (flag_fixe == 0 || strlen(s) == size) break;
printf("Saisie incorrecte - Recommencez !!!\n");
}
}
size_t supprimeSousChaineAvecIndices(char s[], char ssch[]) {
size_t compteurDeSuppression = 0, indiceLecture = 0, indiceEcriture = 0;
char motif[4];
sprintf(motif, "x%s", ssch);
while (1) {
printf("\nIndex actuel : %lu, %lu\n", indiceLecture, indiceEcriture);
if (strncmp(&s[indiceLecture], motif, strlen(motif)) == 0) {
// La sous chaine est bien dedans
printf("On a trouve, on supprime la sous chaine.\n");
indiceLecture = indiceLecture + strlen(motif);
compteurDeSuppression++;
}
else {
printf("On garde %c dans la chaine.\n", s[indiceLecture]);
s[indiceEcriture] = s[indiceLecture];
if (s[indiceLecture] == '\0') break;
indiceEcriture++;
indiceLecture++;
}
}
return compteurDeSuppression;
} |
Partager