什么错误现象啊?
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;
}
思路没什么错,而且题目说测试用例都是符合条件的,你提交代码错误示例是什么阿
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!