Remplacer les occurrences d'une chaine par un autre char en récursif en C

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J’ai un problème avec un de mes algo en C, je dois créer une fonction void remplace(char* ch, char c1, char c2) qui remplace toutes les occurrences de c1 dans ch par c2.

Voilà mon algo :

1
2
3
4
5
6
7
8
void remplace(char* ch, char c1, char c2)
{
 if(*ch=='\0')
   EXIT_SUCCESS;
 if(*ch==c1)
   *ch=c2;
 remplace(ch+1,c1,c2);
}

Voilà mon main :

1
2
3
4
char tab[10]="bonjour";
remplace(tab,'o','a');
printf("%s\n",tab);
return 0;

J’arrive à compiler mais à l’exécution j’obtiens une erreur de segmentation, j’ai essayé d’autre syntaxes pour les pointeurs pour écrire la fonction mais ça n’a rien changé, j’ai essayé d’augmenter la taille de la chaîne dans le main mais ça n’a pas marché non plus.

Avez-vous une idée ?

Merci bien !

Salut,

La ligne 4 de ta fonction ne fait pas du tout ce que tu veux.

+6 -0

return permet de sortir d’une fonction (même quand le type de retour est void, il faut juste ne préciser aucune valeur derrière le return), pas exit.

exit, c’est une fonction dont le but est de quitter le programme, ce n’est pas ce que tu cherches ici.

exit une fonction permet d’arrêter le programme.

return une instruction qui permet de quitter une fonction.

EXIT_SUCCESS est une valeur d’arrêt du programme utilisée par le SE pour indiquer que le programme s’est arrêter correctement.

Par exemple :

1
exit(EXIT_SUCCESS);

Indiquera au SE que le programme s’est correctement arrêter.

1
return EXIT_SUCCESS;

N’a de sens que pour la fonction main.

1
return;

N’a de sens que pour une fonction de type void.

1
return 0;

Pour finir une fonction de type int.

Remarque, tu n’es pas obliger d’appeler return pour quitter une fonction. La fin d’une fonction suffit.

1
2
3
4
5
6
void remplace(char* ch, char ch1, char ch2) {
  if(*ch == ch1)
    *ch = ch2;
  if( *ch )
    remplace(ch+1, ch1, ch2);
}

Deuxième remarque, j’aurais plus fait un while plutôt qu’une fonction recursive.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte