Intanto questa condizione è sbagliata:
codice:
if((vc[I] <= 'A')&&(vc[I] >= 'Z')||(vc[I] <= 'a')&&(vc[I] >= 'z')){
Lo stesso carattere non può essere minore di 'A' e contemporanemente maggiore di 'Z'.

codice:
void sposta(tvettchar &vc, int N){
   char canc; // questa non è inizializzata.
   int posiz = ricerca(vc,0,N-1,canc);
   for(int I=posiz;I<N-1;I++)
      vc[I] = vc[I+1];
}