爱问知识人 爱问教育 医院库

C语言,删除字符串中的指定字符,求找错~

首页

C语言,删除字符串中的指定字符,求找错~

#include<stdio.h>
#include<string.h>
main()
{
  int l1,l2,i,j,k;
  char a[20],b[20],c[20];
  scanf("%s%s",a,b);
  l1=strlen(a);
  l2=strlen(b);
  for(i=0;i<l2;i++)
    for(j=l1-1;j>=0;j--)
      if(a[j]==b[i]) 
      {
        for(k=j;k<l1;k++)
          a[k]=a[k+1];
      }
  printf("%s\n",a);
}

输入两个字符串 s1 和 s2 ,在 s1 中删除任何 s2 中有的字符。例如, s1 :“ abc123ad ”, s2 :“ a1 ” ,则输出“bc23d ”。
 
输入: 两个字符串 s1 和 s2 

输出: 删除后的字符串 s1 

提交回答
好评回答
  • 2012-04-27 14:48:25
      你的错误就在于没有充分认识到c语言的字符串是以\0为结束符的
    你的移动了字符后,没有在新字符传的尾部加上\0,
    导致的结果是输出的数据后面出现有重复的字符。
       你的算法存在不足是你出现这个问题的主要原因 你应该这样处理: 循环处理s1的所有字符,如果该字符出现在s2中,那么就不再处理 如果没有出现在s2中,就将该字符保存在第三个字符串中, 最后将第三个字符串的数据尾部增加\0后拷贝到s1中 这个效率要比你的算法效率高,不易出错 下面是实例代码: /** * 将字符串s1中的出现在s2中的字符全部删除,并在s1中返回 * @param s1 * @param s2 * @return */ char *rm(char *s1, char *s2) { int iLen1; int iLen2; int flag; int i, j, k; char *tmp; char ch; if ((s1 == NULL) || (s2 == NULL)) { //字符串有问题 return s1; } iLen1 = strlen(s1); iLen2 = strlen(s2); //申请临时空间,注意最后要有\0,因此多申请一个 tmp = (char*) malloc((iLen1 + 1) * sizeof (char)); if (tmp == NULL) { //申请空间失败,没有办法处理了,只好返回NULL return NULL; } k = 0; for (i = 0; i < iLen1; i++) { ch = s1[i]; flag = 0; for (j = 0; j < iLen2; j++) { if (s2[j] == ch) { //该字符在s2中出现,不做任何处理 flag = 1; break; } } if (0 == flag) { //该字符没有出现在s2中,加入到临时空间中 tmp[k] = ch; k++; } } //设置结束标志 tmp[k] = '\0'; strcpy(s1, tmp); //拷贝到目标传中 free(tmp); //释放申请的临时空间 return s1; } 下面是数组的: /** * 将字符串s1中的出现在s2中的字符全部删除,并在s1中返回 * @param s1 * @param s2 * @return */ char *rm(char s1[], char s2[]) { int iLen1; int iLen2; int flag; int i, j, k; char ch; if ((s1 == NULL) || (s2 == NULL)) { //字符串有问题 return s1; } iLen1 = strlen(s1); iLen2 = strlen(s2); k = 0; for (i = 0; i < iLen1; i++) { ch = s1[i]; flag = 0; for (j = 0; j < iLen2; j++) { if (s2[j] == ch) { //该字符在s2中出现,不做任何处理 flag = 1; break; } } if (0 == flag) { //该字符没有出现在s2中 if (i != k) { //以前已经删除了一些字符,导致需要调整字符位置了 s1[k] = ch; } k++; } } //设置结束标志 s1[k] = 0; return s1; }。

    好***

    2012-04-27 14:48:25

其他答案

类似问题

换一换
  • C/C++ 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 171-190
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):