Advertisement
AntonioVillanueva

Filtrer caractères dans une chaîne C

Apr 17th, 2023
633
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.37 KB | None | 0 0
  1. /*
  2.  * Filtrer les caractères d'une chaîne en c
  3.  * Antonio Villanueva
  4.  */
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. //Filtrer ou supprimer un caractère c de str, de taille size
  10. void filterChar(char *str,size_t size,char c) {
  11.  
  12.     //allouer de la mémoire pour une chaîne tmp équivalente à la chaîne d'origine
  13.     char *tmp=  malloc ( size*(sizeof (char))+1 );
  14.     //memset(tmp, 0,  size+1); // Establecemos los primeros 10 bytes a 0
  15.    
  16.     char *ptr=tmp;//Référence au début du pointeur tmp
  17.     char *ptr2=str;//Référence au début du string str
  18.    
  19.     if (tmp == NULL) {
  20.         printf("Erreur: Malloc.\n");
  21.         exit(1);
  22.     }  
  23.    
  24.  
  25.     //S'il s'agit d'une chaîne de type char*, elle ne se termine pas par zéro !
  26.    
  27.     while ( size >0){//jusqu'à ce qu'il atteigne la fin de la chaîne de texte
  28.  
  29.         if (*str != c){//Si ce n'est pas le caractère à supprimer copier
  30.             *tmp=*str;//Copy   
  31.             ++tmp;     
  32.         }
  33.         ++str;
  34.         size--;
  35.     }
  36.  
  37.     memcpy (ptr2,ptr,size);//Copie le résultat tmp dans la chaîne source str
  38.    
  39.     free (ptr); //Il s'agit de tmp en première position tmp [0] ...
  40. }
  41.  
  42. int main(){
  43.    
  44.     //char  *chaine="aabcdefghijklmaaaaanofdsqfdss";//ne finit pas par zéro
  45.     char  chaine[]="aabcdefghijklmaaaaanofdsqfdss"; //finit par zéro
  46.        
  47.    
  48.     filterChar (chaine,strlen(chaine),'a');//Filtre p.e la lettre a
  49.     printf ("%s \n",chaine);   
  50.     return 0;
  51. }
  52.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement