鱼C论坛

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

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

[复制链接]
发表于 2021-12-11 11:20:11 | 显示全部楼层 |阅读模式
5鱼币
//编写程序从字符串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[i]==t[j++]&&t[j]!='\0')
                                {k=i; s[k++]='\0';}                                                                                                        
                        
}

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

结果为
aaaa

请大佬帮帮忙,谢谢
最佳答案
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[i]==t[j++]&&t[j]!='\0')
                                {k=i; s[k++]='\0';}                                                                                                       
                        for( i=0;s[i];i++);
                       for(j=i;j<N;j++)/////////
                       {
                            if(s[j])s[i++]=s[j];
                        }
                   s[i]='\0';
}

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

最佳答案

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i]==t[j++]&&t[j]!='\0')
                                {k=i; s[k++]='\0';}                                                                                                       
                        for( i=0;s[i];i++);
                       for(j=i;j<N;j++)/////////
                       {
                            if(s[j])s[i++]=s[j];
                        }
                   s[i]='\0';
}

int main()
{
        char s[N]="aaaabbaaabb";
        char t[n]="bb";
        my_delete(s,t);
        puts(s);
                return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

void del(char*, char);

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

void del(char str[], char c){
        for(int i = 0; str[i]; i++)
        if(str[i] == c){
        for(int j = i; str[j]; j++)
        str[j] = str[j+1];
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

为什么for( i=0;s[i];i++);要加分号呀,大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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] ; n ++)                                                        ;
        for(i = 0 ; i < n ; i ++) {                 
                for(j = 0 ; s[i + j] && s[i + j] == t[j] ; j ++)                        ;
                if(! t[j]) {
                        for(k = 0 ; k < n - (i + j) + 1 ; k ++) s[i + k] = s[i + j + k] ;
                        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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

谢谢
想知道小甲鱼最近在做啥?请访问 -> 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的位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

愧领了,下面是改完的代码
#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];i++)
                {
                for( j=0;t[j];j++)
                        if(s[i+j]!=t[j])break;
                                if (j==n-1)
                                {
                                        for( j=i;j<=k;j++)s[j]=s[j+n-1];
                                        k-=n-1;
                                        i--;
                                }
                            
                }
                        
                       
}

int main()
{
        char s[N]="aaabbbaaabb";
        char t[n]="bb";
        my_delete(s,t);
        puts(s);
                return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 07:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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