新手小白,码了道题
题目:
设计一个函数char *f(char *p,char *s),功能是在p指向的字符串中查找并删除s指向的子串。若找到多个子串则全部删除,删除完成后返回结果字符串的首地址。函数main()输入字符串与子串,调用f()后输出结果字符串。
分析:
声明四个指针(pdest为目标指针,pspo为运动指针,m辅助目标指针记录位置,q很容易看出来),其中前两个都指向字符串p(源字符串),从首端开始比较,逐渐递增(即指针下移),m记录进入循环之前目标指针的位置,当出现与子串首位相同的字符时,进入子循环语句,在此循环中,用 *pdest++ = *pspo++语句实现值覆盖及运动指针移动,目标指针移动,结束循环后与子串进行比较,若完全相等,则将辅助目标指针位置赋给目标指针,(移回进入循环前的位置)若不等,则运行 *pdest++ = *pspo++;实现覆盖。(不知道表述得会不会有点绕qaq)
#include<iostream>
using namespace std;
char *f(char *p,char *s);
char *f(char *p,char *s)
{
char *pdest = p, *pspo = p;
char *q = s;
char *m = pdest;
while(*pspo)
{
m = pdest;
while(*q&&*pspo==*q)
{
*pdest++ = *pspo++;
q++;
}
if(*q=='\0')
pdest = m;
else
*pdest++ = *pspo++;
q = s;
}
*pdest = '\0';
return p;
}
int main()
{
int i;
char src[100];
char vic[100];
cout<<"source string: ";
gets(src);
cout<<"vice string: ";
gets(vic);
if(src&&vic)
cout<<"after: \n"<<f(src,vic);
else
cout<<"error";
return 0;
}