/*2. 一个顺序表中存放字符(只有数字字符和英文字符), 编写算法删除所有的数字字符*/ #include<iostream> using namespace std; typedef char datatype; const int maxsize = 100; typedef struct { datatype data[maxsize]; int n; }sqlist; sqlist* InitList() { sqlist *L=new sqlist; L->n=0; return L; } int Length(sqlist * L) { return L->n; } int Insert(sqlist * L, datatype x, int i) { int j; if(L->n==maxsize) { cout<<"表满,不能插入!"<<endl; return -1; } if(i<1 || i>L->n+1) { cout<<"非法插入位置!"<<endl; return 0; } for(j=L->n ; j>=i ; j--) { L->data[j] = L->data[j-1]; } L->data[i-1]=x; L->n++; return 1; } int Delete(sqlist * L , int i) {//从顺序表中删除第i个位置上的结点 int j; if(L->n==0) { cout<<"表空,不能删除!(下溢)\n"; return -1; } if(i<1 || i>L->n) { cout<<"非法删除位置!\n"; return 0; } for(j=i+1 ; j<=L->n ; j++) L->data[j-2] = L->data[j-1]; L->n--; return 1; } void Display(sqlist * L) { cout<<"线性表中的数据元素依次是 : "; int i; for(i=0;i<L->n;i++) { cout<<L->data[i]<<" "; } cout<<endl<<endl; } int IsDigit(char c) { if(c>='0' && c<='9') return 1; else return 0; } void DeleteDigit(sqlist * L)//删除顺序表中的数字字符方法1 { int i; for(i=0 ; i<L->n ; ) { if( IsDigit(L->data[i]) ) Delete(L,i+1); else i++; } } void DeleteDigit2(sqlist * L)//删除顺序表中的数字字符方法2 { int i,s; s=0; for(i=0;i<L->n;i++) { if( IsDigit(L->data[i])) s++; else if(s>0) L->data[i-s] = L->data[i]; } L->n = L->n - s; } int main() { cout<<"以下先验证 删除顺序表中的数字字符方法1"<<endl; sqlist * List = InitList(); Insert(List,'a',1); Insert(List,'2',2); Insert(List,'3',3); Insert(List,'c',4); Insert(List,'s',5); Insert(List,'8',6); Insert(List,'6',7); Display(List); DeleteDigit(List); cout<<"删除数字字符后。"<<endl; Display(List); cout<<"以下验证 删除顺序表中的数字字符方法2"<<endl; sqlist * List2 = InitList(); Insert(List2,'a',1); Insert(List2,'2',2); Insert(List2,'3',3); Insert(List2,'c',4); Insert(List2,'s',5); Insert(List2,'8',6); Insert(List2,'6',7); Display(List2); DeleteDigit(List2); cout<<"删除数字字符后。"<<endl; Display(List2); return 0; }