Eliminare i caratteri non numerici da una stringa di testo in C

L’idea per una possibile soluzione senza scomodare funzioni di copia e unione, è di controllare ogni lettera della parola iniziale, verificare se sia o meno una lettera alfabetica da sostituire e procedere quindi non con la cancellazione ma con uno shift che sovrascrive la lettera incriminata con quella accanto a destra, trascinando tutte le altre. L’ultima lettera sarà per forza vuota e quindi chiuderà il ciclo.

Unica accortezza è nello stare attenti che lo shift sposta la successiva lettera da controllare a quella attuale quindi si deve procedere con l’iterazione in modo opportuno. Ecco perché vale la pena usare un ciclo while.

#include <stdio.h>
#include <string.h>

#define LUNGHEZZA 100

int main() 
{
  int i,j;
  
  char parola[LUNGHEZZA];
  int LUNGHEZZAEFFETTIVA;
  printf("Inserisci una parola da ripulire ");
  fgets(parola,LUNGHEZZA, stdin);

  parola[strlen(parola)-1] = '\0';
  LUNGHEZZAEFFETTIVA = strlen(parola);  

  i = 0;
  while (i < LUNGHEZZAEFFETTIVA)
  {
    
    //printf("analizzando la lettera %c \n", parola[i]);
    if (parola[i]>'a' && parola[i]<'z')
    {
      printf("elimino %c \n",  parola[i]);
      //effettuo uno shift da destra a sinistra
      for (j = i; j < LUNGHEZZAEFFETTIVA; j++)
      {
        parola[j] = parola[j+1];
      }
    
    }
    else
    {
      //se ho effettuato lo shift a sinistra
      //la prossima lettera da controllare è nella 
      //stessa posizione, altrimenti vado avanti
      i++;
    }
  
  }
  printf("La parola pulita è %s", parola);

  return 0;
}
  

Ultima modifica 17 Novembre 2022