鱼C论坛

 找回密码
 立即注册
查看: 1147|回复: 9

[已解决]删除字符串,找错

[复制链接]
发表于 2021-12-11 11:20:11 | 显示全部楼层 |阅读模式
5鱼币
  1. //编写程序从字符串s中删去所有子字符串t(如果s不包含t,则不删除)。
  2. #include<stdio.h>
  3. #define N 12
  4. #define n 3
  5. char my_delete(char *s,char *t)
  6. {        int k=0;
  7.         for(int i=0;i<N;i++)
  8.                 for(int j=0;j<n;j++)
  9.                         if(s[i]==t[j++]&&t[j]!='\0')
  10.                                 {k=i; s[k++]='\0';}                                                                                                       
  11.                        
  12. }

  13. main()
  14. {
  15.         char s[N]="aaaabbaaabb";
  16.         char t[n]="bb";
  17.         my_delete(s,t);
  18.         puts(s);
  19. }
复制代码


结果为
  1. aaaa
复制代码


请大佬帮帮忙,谢谢
最佳答案
2021-12-11 11:20:12
本帖最后由 jhq999 于 2021-12-11 11:32 编辑
  1. #include<stdio.h>
  2. #define N 12
  3. #define n 3
  4. void my_delete(char *s,char *t)
  5. {        int i=0,j=0, k=0;
  6.         for(i=0;i<N;i++)
  7.                 for( j=0;j<n;j++)
  8.                         if(s[i]==t[j++]&&t[j]!='\0')
  9.                                 {k=i; s[k++]='\0';}                                                                                                      
  10.                         for( i=0;s[i];i++);
  11.                        for(j=i;j<N;j++)/////////
  12.                        {
  13.                             if(s[j])s[i++]=s[j];
  14.                         }
  15.                    s[i]='\0';
  16. }

  17. int main()
  18. {
  19.         char s[N]="aaaabbaaabb";
  20.         char t[n]="bb";
  21.         my_delete(s,t);
  22.         puts(s);
  23.                 return 0;
  24. }
复制代码

最佳答案

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

使用道具 举报

发表于 2021-12-11 11:20:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2021-12-11 11:32 编辑
  1. #include<stdio.h>
  2. #define N 12
  3. #define n 3
  4. void my_delete(char *s,char *t)
  5. {        int i=0,j=0, k=0;
  6.         for(i=0;i<N;i++)
  7.                 for( j=0;j<n;j++)
  8.                         if(s[i]==t[j++]&&t[j]!='\0')
  9.                                 {k=i; s[k++]='\0';}                                                                                                      
  10.                         for( i=0;s[i];i++);
  11.                        for(j=i;j<N;j++)/////////
  12.                        {
  13.                             if(s[j])s[i++]=s[j];
  14.                         }
  15.                    s[i]='\0';
  16. }

  17. int main()
  18. {
  19.         char s[N]="aaaabbaaabb";
  20.         char t[n]="bb";
  21.         my_delete(s,t);
  22.         puts(s);
  23.                 return 0;
  24. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 11:56:05 From FishC Mobile | 显示全部楼层
  1. #include <stdio.h>

  2. void del(char*, char);

  3. int main(){
  4.         char str[7] = "banana";
  5.         del(str, 'a');
  6.         printf("%s", str);
  7.         return 0;
  8. }

  9. void del(char str[], char c){
  10.         for(int i = 0; str[i]; i++)
  11.         if(str[i] == c){
  12.         for(int j = i; str[j]; j++)
  13.         str[j] = str[j+1];
  14.         }
  15. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-11 12:05:35 | 显示全部楼层

为什么for( i=0;s[i];i++);要加分号呀,大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 13:37:26 | 显示全部楼层
put(s),字符串在内存中就是以 \0为结尾的, {k=i; s[k++]='\0';}  你的这串代码,在字符串里遇见b就直接加上 \0,就代表这个字符串到这就结束了,所以到后边就都无法输出
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-11 13:39:51 | 显示全部楼层
18202486056 发表于 2021-12-11 13:37
put(s),字符串在内存中就是以 \0为结尾的, {k=i; s[k++]='\0';}  你的这串代码,在字符串里遇见b就直接加 ...

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

使用道具 举报

发表于 2021-12-11 13:51:02 | 显示全部楼层
本帖最后由 jackz007 于 2021-12-11 14:06 编辑
  1. #include<stdio.h>

  2. char * my_delete(char *s , char * t)
  3. {        
  4.         int i , j , k , n                                                               ;
  5.         for(n = 0 ; s[n] ; n ++)                                                        ;
  6.         for(i = 0 ; i < n ; i ++) {                 
  7.                 for(j = 0 ; s[i + j] && s[i + j] == t[j] ; j ++)                        ;
  8.                 if(! t[j]) {
  9.                         for(k = 0 ; k < n - (i + j) + 1 ; k ++) s[i + k] = s[i + j + k] ;
  10.                         n -= j                                                          ;
  11.                         i --                                                            ;
  12.                 }
  13.         }
  14.         return s                                                                        ;
  15. }                                 

  16. main()
  17. {
  18.         char s[] = "aaaabbaaabb" , t[] = "bb"                                           ;
  19.         puts(my_delete(s , t))                                                          ;
  20. }
复制代码

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

  2. D:\00.Excise\C>x
  3. aaaaaaa

  4. D:\00.Excise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-11 14:06:33 | 显示全部楼层
jackz007 发表于 2021-12-11 13:51
编译、运行实况:

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

使用道具 举报

发表于 2021-12-11 15:16:52 | 显示全部楼层
本帖最后由 jhq999 于 2021-12-11 15:20 编辑
辞树 发表于 2021-12-11 12:05
为什么for( i=0;s;i++);要加分号呀,大佬


找到第一个删除的位置,也就是样例里第一个b的位置
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 15:59:53 | 显示全部楼层
本帖最后由 jhq999 于 2021-12-11 16:46 编辑

愧领了,下面是改完的代码
  1. #include<stdio.h>
  2. #define N 12
  3. #define n 3
  4. void my_delete(char *s,char *t)
  5. {        int i=0,j=0, k=N;
  6.         for(i=0;s[i];i++)
  7.                 {
  8.                 for( j=0;t[j];j++)
  9.                         if(s[i+j]!=t[j])break;
  10.                                 if (j==n-1)
  11.                                 {
  12.                                         for( j=i;j<=k;j++)s[j]=s[j+n-1];
  13.                                         k-=n-1;
  14.                                         i--;
  15.                                 }
  16.                             
  17.                 }
  18.                         
  19.                        
  20. }

  21. int main()
  22. {
  23.         char s[N]="aaabbbaaabb";
  24.         char t[n]="bb";
  25.         my_delete(s,t);
  26.         puts(s);
  27.                 return 0;
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-5 00:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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