这个有哪里是不对的呢?

img

img


正文描述:试了几次数据,应该没特殊情况,这个有哪里是不对的呢?

img

什么错误现象啊?
for(i=v+w-1;i<strlen(s) && s[i] != '\0';i++)
结束条件要加上i<strlen(s),题目并没有说v+w的值是小于字符串长度的。

#include <stdio.h>
char *del(char *s,int v,int w)
{
    int i,j=v;
    for(i=v+w-1;i<strlen(s) && s[i] != '\0';i++)
    {
        if(i>=0 && j>=1)
            s[j-1] = s[i];
        j++;
    }
    s[i-w] = '\0';
    return s;
}
int main()
{
    char k[257];
    int v,w;
    scanf("%d%d",&v,&w);
    getchar();
    gets(k);
    char *p = del(k,v,w);
    printf("%s",p);
    system("pause");
}

(1)题目里说是v和w大于等于0,小于MIN(256,strlen(s)),但是,你需要再代码里判断 i 和 j 是否越界了。比如输入字符长度是10,v输入的是8,w输入的是5,都是满足上面的条件的,但是v+w就超出字符串长度了!!所以,你的代码里需要添加 i 是否>=strlen(s)的判断
(2)还有一个问题,就是v=0的时候是会出错的,题目里允许v=0,但是当v=0的时候,delete函数里,j-1是-1,数组溢出!!!

代码修改如下

#include <stdio.h>
#include <string.h>

char* delete(char* s, int v, int w)
{
    int i, j = v, op = 1;
    if (w == 0) return s; //如果w为0,直接返回s
    if (v == 0) j = 1; //避免数组溢出
    for (i = v + w-1; i < strlen(s); i++)
    {
        s[j - 1] = s[i]; j++;
    }
    s[i - w] = '\0';
    return s;
}

int main()
{
    char k[257];
    int v, w, i = 0;
    scanf("%d%d", &v, &w);
    getchar();
    gets(k);
    char* p;
    p = delete(k, v, w);
    printf("%s", k);
    return 0;
}

思路没什么错,而且题目说测试用例都是符合条件的,你提交代码错误示例是什么阿

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632