回 帖 发 新 帖 刷新版面

主题:删去子字符串

输入abc1abc2abc3输出123;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void del(char *str,char *sub)
{int i=0,len1,len2,j=0;
char u[80];
len1=strlen(str);
len2=strlen(sub);
while(i<len1&&*str!='\0')
{if(strncmp(str+i,sub,len2)==0)
i+=len2;
else 
{u[j]=str[i];
i++;j++;}
}
u[j]='\0';
str=u;
}
int main()
{char s1[80]="abc1abc2abc3",s2[80]="abc";
del(s1,s2);
printf("%s\n",s1);
system("pause");
return 0;}
为什么不能用上面的代码实现

回复列表 (共7个回复)

沙发

不排版,缩成一团像坨大便一样
即使你想用来恶心别人,难道自己看着就不难受吗

板凳

为何不用strstr呢?

3 楼


不好意思我是初学者不会排版

4 楼

尽量一行只写一个语句,各语句块间保持一定的缩进。有时候看那些排版排的好的代码,不管能不能看得懂,也会让人感觉很舒服。  多看看别人的代码,慢慢的就会了的。

5 楼

初学就不会排版那是借口,你一定要严格要求自己,先学会排版(代码缩进规则),其他再说。
否则你只能是害自己。

6 楼

谢谢两位专家的指点。

7 楼

str=u;
}
首先这一行就是完全错误的,u是局部变量,直接赋给str是个什么意思,
字符串应该是不会支持这种直接赋值运算的。

给你个能实现功能的del
[code=c]
void del(char *str,char *sub)
{
    int i=0,len1,len2,j=0;
    char u[80];
    int pos1 = 0;
    int pos2 = 0;
    int len  = 0;

    memset(u, 0x00, sizeof(u));
    len1 = strlen(str);
    len2 = strlen(sub);

    while((i < len1) && (*str!='\0'))
    {
        if(0 == strncmp(str + i, sub, len2))
        {
            //printf("find %s, i : %d, delete\n", sub, i);
            pos1 = i;
            i ++;
            while((i < len1) && (*str!='\0'))
            {
                if(0 == strncmp(str + i, sub, len2))
                {
                    //printf("find next %s, i = %d\n", sub, i);
                    pos2 = i;
                    break;
                }
                else
                {
                    i++;
                }
            }
            if (i == len1)
            {
                //printf("case1\n");
                strcpy(&u[j], &str[pos1 + len2]);
            }
            else
            {
                len = pos2 - pos1 - len2;
                //printf("case2, len %d\n", len);
                strncpy(&u[j], &str[pos1 + len2], len);
            }

            j += len;
            len = 0;
            pos1 = 0;
            pos2 = 0;
        }
        else 
        {
            i++;
            j++;
        }
    }
    //printf("u:%s\n", u);
    strcpy(str, u);
}
[/code]

另外,代码缩进真的很重要,要不然真看不懂啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册