Adesso l' ho modificato così ma niente ancora non funziona mi restituisce gli stessi caratteri che inserisco:
#include <cstdlib>
#include <iostream>

using namespace std;

typedef char tvettchar[100];

bool assegna(char C){
return ((C >= '!')&&(C <= '/')||(C >= ':')&&(C <= '@')||(C >= '{')&&(C <= '~'));
}

void acquisiscivett(tvettchar &vc, int &N){
do{
cout<<"Inserisci quanti caratteri inserire ";
cin>>N;
}while((N<1)||(N>100));
for(int I=0;I<N;I++){
cout<<"Inserisci il "<<I+1<<char(248)<<" carattere: ";
cin>>vc[I];
}
}

int ricerca(tvettchar vc, int inf, int sup, char canc){
if(inf > sup)
return -1;
else{
int centro = (inf + sup)/2;
if(assegna(canc) == assegna(vc[centro])){
return centro;
}
else{
if(assegna(canc) < assegna(vc[centro])){
return ricerca(vc,inf,centro-1,canc);
}
else{
return ricerca(vc,centro+1,sup,canc);
}
}
}
}

void sposta(tvettchar &vc, int N){
char C;
for(int I=ricerca(vc,0,N-1,assegna(C));I<N-1;I++)
vc[I] = vc[I+1];
}

void cancella(tvettchar &vc, int &N){
int I;
for(I=0;I<N;I++){
if(!assegna){
sposta(vc,N);
N--;
}
}
}

void visualizzavett(tvettchar vc, int N){
int I;
for(I=0;I<N;I++){
cout<<I+1<<char(248)<<" carattere: "<<vc[I]<<endl;
}
}

int main()
{
tvettchar vc;
int N;

acquisiscivett(vc,N);
cancella(vc,N);
visualizzavett(vc,N);

system("PAUSE");
return EXIT_SUCCESS;
}