C语言删除一个字符串中的指定字符(字母区分大小写)

##问题描述
删除一个字符串中的指定字符(字母区分大小写)

输入
一个原始字符串,一个欲删除的字符集(该字符集元素不重复)

输出
删除指定字符后的字符串(按ASCII码序升序)。特别地,若删除后的字符串为空,输出null

样例1

输入

aacbggc12
gc2

输出
1aab

样例2

输入

abcgagc1222
abgc12

输出
null

##问题分析
在没学习指针和字符串之前,我们用什么方法解决?
我的想法是使用三个数组。
第一个数组ch用来读入原始字符串;
第二个数组del用来读入需删除字符的数组;
第三个数组output用来储存和输出结果。

注意,这里的三个数组都是char型的。

这里的关键步骤有两步:
1.如何从ch中删除del中的字符,并将其余字符存入output 中;
2.如何将output中的字符元素按ASCLL升序打印出来。

对于第一个问题,我们可以对ch和del两个数组进行一个双层循环比较它们的值。对于每一次比较,若两元素相同,则将变量c++.在内层循环中,每次循环结束后检测c是否为0,是则将ch[]存入output[]中,并用一个变量d记录output中元素的个数。
这样,在两层循环都结束后,所有需要的字符都被存入了output[]中。

int a,b,c,d=0;
for(a=0,c=0;a<i;i++){      //i,j分别是ch与del读入元素的个数
   for(b=0;b<j;b++){
     if(ch[a]==del[b])
     c++;
     }
     if(c==0){
     output[d]=ch[a];
     d++;
     }
}

if(d==0)
printf("null");
     

下面来看第二个问题。
这就是一个简单的冒泡排序的问题,从数值变成了ASCLL码的值而已。
先选最小的排第一,再从剩下的里面选最小的排第一,以此类推,直到最后一个元素。
最后将ouput[]挨个输出即可。

for(f=0;f<d;f++){
  for(g=f+1;g<d;g++){
  if(output[f]>output[g]){
  min=output[f];
  output[f]=output[g];
  output[g]=min;
  }
 }  
}
for(h=0;h<d;h++)
printf("%c",output[h]);

技术关键:
1.不使用指针,统计数组有效元素个数;
2.三组数据,一组输入,一组输入/比较,一组储存/输出;
3.利用中间变量实现元素的比较。

  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值