新手求助,附题目及本人思路,编译成功但执行出错
/***函数原型:int del_substr(char *str,char const *substr)
**函数首先判断substr是否出现在str中。如果它并未出现,函数就返回0;如果出现,函数应该把str中位于该子串后面的所有字符复制到该子串的位
**置,从而删除这个子串,然后函数返回1.如果substr多次出现在str中,函数只删除第一次出现的子串。不得使用字符串库函数。
**按照do8do8do8的提示改了,运行成功!感谢大家,我可以继续做下一题了,哈哈
*/
#include "stdio.h"
#include "conio.h"
int del_substr(char *str,char const *substr)
{
/*
** p用来执行移动操作,i记录substr的长度,执行比较
*/
int i = 0;
char *p = NULL;
/*
** 如果任意串为空,就返回0,不执行任何操作
*/
if(str == NULL || substr == NULL || *str == '\0' || *substr == '\0') return 0;
while(*str != '\0')
{
while(*(str+i) == *(substr+i))
{
i++;
if(*(substr+i) == '\0')
{
/*
** substr到达串尾,p指向删除substr后的首地址,开始移动复制
*/
printf("\ni = %d\n",i);
p = str+i-1;
printf(“\np = %s\n”,p);
getch();
/*
** 终于发现问题:原来写的是while(p != '\0'),忘了加个*号了
*/
while(*p != '\0')
{
*str++ = *p++;
}
*str = '\0';
return 1;
}
}
/*
** 重置 i
*/
i = 0;
str++;
}
return 0;
}
int main(void)
{
/*
** 测试函数
*/
int j,key = 0;
char *c1 = "ABCAEFGSAEFI";
char *c2 = "AEF";
char *c3 = "AEG";
printf("C1 = %s\n",c1);
printf("C2 = %s\n",c2);
printf("C3 = %s\n",c3);
printf("2 = c2 , 3 = c3 ,input your choice : ");
scanf("%d",&key);
switch(key)
{
case 2:
j = del_substr(c1,c2);
if(j == 1) printf("\nNow c1 = %s",c1);
else printf("\nDo nothing !");
break;
case 3:
j = del_substr(c1,c3);
if(j == 1) printf("\nNow c1 = %s",c1);
else printf("\nDo nothing !");
break;
default:
printf("\nINPUT ERROR !");
getch();
return 0;
}
getch();
return 1;
}
[ 本帖最后由 uppermore 于 2010-7-20 16:45 编辑 ]