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
| #include <stdio.h>
#include <string.h>
void saisie(char* const, const char* const, const size_t, const size_t);
size_t remplace(char*, const char* const, const char* const, const char);
#define N (128)
#define R (4)
int main() {
char chaine[N + 1];
saisie(chaine, "Chaine de base", N, 0);
char orig[R + 1];
saisie(orig, "Chaine à trouver", R, R);
char rempl[R + 1];
saisie(rempl, "Chaine à remplacer", R, R);
size_t n;
if ((n=remplace(chaine, orig, rempl, 'c')) != 0)
printf("Chaine remplacée [%s] (rempl=%lu)\n", chaine, n);
else
printf("Chaine non modifiée [%s]\n", chaine);
return 0;
}
void saisie(char* const s, const char* const prompt, const size_t max, const size_t min) {
char tmp[255 + 1];
while (1) {
if (prompt) printf("%s\n", prompt);
printf("Entrez une chaine de %lu caractères :", max); fflush(stdout);
fgets(tmp, 255 + 1, stdin);
char *pt;
if ((pt=strchr(tmp, '\n')) != NULL) *pt='\0';
if (strlen(tmp) >= min) break;
printf("Pas assez de lettres dans [%s] (%lu) !!!\n", tmp, strlen(tmp));
}
strncpy(s, tmp, max);
s[max]='\0';
}
size_t remplace(char* s, const char* const orig, const char* const rempl, const char end) {
size_t len=strlen(s);
if (len <= R) return 0;
size_t n=0;
size_t i=0;
while (i < (len - R)) {
if (strncmp(s, orig, R) == 0 && s[R] == end) {
strncpy(s, rempl, R);
i+=(R+1);
s+=(R+1);
n++;
}
else {
i++;
s++;
}
}
return n;
} |
Partager