辞树 发表于 2021-12-11 11:20:11

删除字符串,找错

//编写程序从字符串s中删去所有子字符串t(如果s不包含t,则不删除)。
#include<stdio.h>
#define N 12
#define n 3
char my_delete(char *s,char *t)
{        int k=0;
        for(int i=0;i<N;i++)
                for(int j=0;j<n;j++)
                        if(s==t&&t!='\0')
                                {k=i; s='\0';}                                                                                                       
                       
}

main()
{
        char s="aaaabbaaabb";
        char t="bb";
        my_delete(s,t);
        puts(s);
}


结果为
aaaa

请大佬帮帮忙,谢谢

jhq999 发表于 2021-12-11 11:20:12

本帖最后由 jhq999 于 2021-12-11 11:32 编辑

#include<stdio.h>
#define N 12
#define n 3
void my_delete(char *s,char *t)
{      int i=0,j=0, k=0;
      for(i=0;i<N;i++)
                for( j=0;j<n;j++)
                        if(s==t&&t!='\0')
                              {k=i; s='\0';}                                                                                                      
                        for( i=0;s;i++);
                     for(j=i;j<N;j++)/////////
                     {
                            if(s)s=s;
                        }
                   s='\0';
}

int main()
{
      char s="aaaabbaaabb";
      char t="bb";
      my_delete(s,t);
      puts(s);
                return 0;
}

傻眼貓咪 发表于 2021-12-11 11:56:05

#include <stdio.h>

void del(char*, char);

int main(){
        char str = "banana";
        del(str, 'a');
        printf("%s", str);
        return 0;
}

void del(char str[], char c){
        for(int i = 0; str; i++)
        if(str == c){
        for(int j = i; str; j++)
        str = str;
        }
}

辞树 发表于 2021-12-11 12:05:35

jhq999 发表于 2021-12-11 11:31


为什么for( i=0;s;i++);要加分号呀,大佬

18202486056 发表于 2021-12-11 13:37:26

put(s),字符串在内存中就是以 \0为结尾的, {k=i; s='\0';}你的这串代码,在字符串里遇见b就直接加上 \0,就代表这个字符串到这就结束了,所以到后边就都无法输出

辞树 发表于 2021-12-11 13:39:51

18202486056 发表于 2021-12-11 13:37
put(s),字符串在内存中就是以 \0为结尾的, {k=i; s='\0';}你的这串代码,在字符串里遇见b就直接加 ...

谢谢

jackz007 发表于 2021-12-11 13:51:02

本帖最后由 jackz007 于 2021-12-11 14:06 编辑

#include<stdio.h>

char * my_delete(char *s , char * t)
{      
      int i , j , k , n                                                               ;
      for(n = 0 ; s ; n ++)                                                      ;
      for(i = 0 ; i < n ; i ++) {               
                for(j = 0 ; s && s == t ; j ++)                        ;
                if(! t) {
                        for(k = 0 ; k < n - (i + j) + 1 ; k ++) s = s ;
                        n -= j                                                          ;
                        i --                                                            ;
                }
      }
      return s                                                                        ;
}                                 

main()
{
      char s[] = "aaaabbaaabb" , t[] = "bb"                                           ;
      puts(my_delete(s , t))                                                          ;
}
      编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
aaaaaaa

D:\00.Excise\C>

辞树 发表于 2021-12-11 14:06:33

jackz007 发表于 2021-12-11 13:51
编译、运行实况:

谢谢

jhq999 发表于 2021-12-11 15:16:52

本帖最后由 jhq999 于 2021-12-11 15:20 编辑

辞树 发表于 2021-12-11 12:05
为什么for( i=0;s;i++);要加分号呀,大佬

找到第一个删除的位置,也就是样例里第一个b的位置

jhq999 发表于 2021-12-11 15:59:53

本帖最后由 jhq999 于 2021-12-11 16:46 编辑

愧领了,下面是改完的代码{:5_105:}
#include<stdio.h>
#define N 12
#define n 3
void my_delete(char *s,char *t)
{      int i=0,j=0, k=N;
      for(i=0;s;i++)
                {
                for( j=0;t;j++)
                        if(s!=t)break;
                                if (j==n-1)
                                {
                                        for( j=i;j<=k;j++)s=s;
                                        k-=n-1;
                                        i--;
                                }
                          
                }
                        
                     
}

int main()
{
      char s="aaabbbaaabb";
      char t="bb";
      my_delete(s,t);
      puts(s);
                return 0;
}
页: [1]
查看完整版本: 删除字符串,找错