问题在于你删除的算法写错了
正确的做法应该是先找出待删除的字符串在原字符串的起始位置
string.h里面有一个现成的函数可以用
然后再求出待删除字符串的长len
最后将后面不需删除字符前移len个单位
char *strstr(char *str1, char *str2)
在string.h里面
功能是找出str2字符串在str1字符串中第一次出现的位置
下面是我自己写的
char * mystrstr(char *input, char *find)
{//找出find在input中第一次出现的位置
char *cmping = find;
while(*input != '\0')
{
if(*input == * cmping)//当前input中位置与find首字母相同
{//接下来要对接着位置的字母进行判断
char *tempos = input + 1;
cmping ++;
int flag = 0;
while(!flag && (*cmping != '\0') && (*tempos != '\0'))
{//条件是对应位置上的字母要相同
if(*cmping++ != *tempos++)
flag = 1;
}
if(flag)//如果没找成cmping要指回find的首字母以进行下次比较
{
cmping = find;
}
else
{
return input;
}
}
input++;
}
return NULL;
}
while (*q!='\0'&&*p!='\0')
{
if (*p==*q)
{
p++;
q++;
}
else
p++;
}
这一段的逻辑有问题。
比如输入123456
再输入34
按照你的代码的意思只是将P指向了5
所以你输出P的时候只有56了
而之前指向12的时候你还在while循环中且没有输出。
综合最后的结果就成你现在看到的了
我写了一段,你参考下吧:
while(*p!='\0')
{
if(*p==*q)
{
while(*q!='\0')
{
p++;
q++;
}
}
cout << *p;
p++;
}