设计一个函数char *f(char *p,char *s),功能是在p指向的字符串中查找并删除s指向的子串

新手小白,码了道题
题目:
设计一个函数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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值