鱼C论坛

 找回密码
 立即注册
查看: 2099|回复: 8

在字符串s1中删除字符串s2中出现的字符

[复制链接]
发表于 2022-6-9 09:22:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
对于这个问题,用两个数组去完成;
该怎么写?
这里是我想的但是没完成的,想知道可以在不涉及指针的情况下该怎么写:
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.         char a[100],b[100];
  6.         gets(a);
  7.         gets(b);
  8.         char ch=' ';
  9.         char temp;
  10.         int i,j;
  11.         for(i=0;i<strlen(a);i++)
  12.         {
  13.                 temp=a[i];
  14.                 for(j=0;j<strlen(b);j++)
  15.                 {
  16.                         if(temp==b[j])
  17.                         {
  18.                                 a[i]=ch;   //这里我把相等的字符都用空格来代替;
  19.                         }
  20.                 }
  21.         }
  22.         for(i=0;i<strlen(a);i++)
  23.         {
  24.                 //这里我想把上面的空格字符删除;
  25.                 //就使用这两个数组,不使用第三个数组;       
  26.         }
  27.         puts(a);
  28. }

复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-6-9 09:51:00 | 显示全部楼层
本帖最后由 jackz007 于 2022-6-9 15:16 编辑
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char a[100] , b[100]                                                   ;
  5.         int c , i , j , k , n                                                  ;
  6.         gets(a)                                                                ;
  7.         gets(b)                                                                ;
  8.         for(n = 0 ; a[n] ; n ++)                                               ;
  9.         for(i = 0 ; b[i] ; i ++) {
  10.                 for(j = 0 ; a[j] ;) {
  11.                         for(c = 0 ; a[j + c] == b[i] ; c ++)                   ;
  12.                         if(c) {
  13.                                 for(k = j + c ; k <= n ; k ++) a[k - c] = a[k] ;
  14.                                 n -= c                                         ;
  15.                         } else {
  16.                                 j ++                                           ;
  17.                         }
  18.                 }
  19.         }
  20.         puts(a)                                                                ;
  21. }
复制代码

        编译、运行实况:
  1. D:\[00.Exercise]\[C]>g++ -o x x.c

  2. D:\[00.Exercise]\[C]>x
  3. AACCBBDD1122334455EEFF00
  4. A05C
  5. BBDD11223344EEFF

  6. D:\[00.Exercise]\[C]>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-9 10:03:57 | 显示全部楼层
jackz007 发表于 2022-6-9 09:51
编译、运行实况:

感觉有点复杂

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-9 10:11:28 | 显示全部楼层
本帖最后由 jhq999 于 2022-6-9 10:25 编辑

  1. #include <stdio.h>
  2. int main()
  3. {
  4.         char s1[32]={0},s2[32]={0};
  5.         scanf("%s%s",s1,s2);////如果需要空格可以scanf("%[^\n]%[^\n]",s1,s2);
  6.         int i,j,k;
  7.         for(i=0;s2[i];i++)
  8.         {
  9.                 for(j=0,k=0;s1[k];)
  10.                 {
  11.                         if(s2[i]==s1[k])
  12.                         {
  13.                                 k+=1;
  14.                                 if('\0'==s1[k])break;
  15.                         }
  16.                         else
  17.                         {
  18.                             s1[j]=s1[k];
  19.                             j++,k++;
  20.                         }

  21.                 }
  22.                 s1[j]='\0';
  23.         }
  24.         printf("%s",s1);
  25.         return 0;
  26. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-9 10:12:10 | 显示全部楼层

回帖奖励 +30 鱼币

本帖最后由 jackz007 于 2022-6-9 10:50 编辑


         感觉到难度?那是学习提高的时机到了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-9 10:54:21 | 显示全部楼层

if('\0'==s1[k])break;

这一行我不太懂具体的意义在哪
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-9 10:57:35 | 显示全部楼层

//afwaefeaf  s1
//ae  s2
//fwefef   再去掉e
//fwff

这个实现的过程是这样的吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-9 11:10:52 | 显示全部楼层
tyf1218405122 发表于 2022-6-9 10:54
if('\0'==s1[k])break;

这一行我不太懂具体的意义在哪

没有意义就去掉,当时是这样的for(j=0,k=0;s1[k];j++,k++)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-9 11:31:31 | 显示全部楼层
tyf1218405122 发表于 2022-6-9 10:57
//afwaefeaf  s1
//ae  s2
//fwefef   再去掉e

  1. s1[k]==s2[i] true时
  2. j不动,k+=1;这样进入下一次循环s1[j]=s1[k]就越过值是s2[i]的元素
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 05:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表