将字符串中abc删除

//设计一个算法,将一个链串s中的所有子串“abc”删除

#include<iostream>
using namespace std;
struct LinkNode	//链串结点指针
{
	char data;		//存放一个字符
	LinkNode *next;	//指向下一个结点的指针
};

class LinkStringClass	//链串类
{
	LinkNode *head;	//链串头结点指针
public:
	LinkStringClass();	//构造函数
	~LinkStringClass();	//析构函数
	LinkStringClass &operator = (char *cstr);	//重载赋值运算符
	int StrLength();	//求串长度
	void DispStr();	//输出串
	void delabc();	//删除子串
};

LinkStringClass::LinkStringClass()
{
	head = new LinkNode();	//创建头结点
	head->next = NULL;
}

LinkStringClass::~LinkStringClass()
{
	LinkNode *pre,*p;
	pre = head;
	p = pre->next;
	while(p != NULL)	//释放链串的所有结点空间
	{
		delete pre;
		pre = p;		//pre,p同步后移
		p = p->next;
	}
	delete pre;
}

LinkStringClass &LinkStringClass::operator = (char *cstr)
{
	int i;
	LinkNode *r = head , *p;	//r始终指向尾结点
	for(i=0;i<cstr[i]!='\0';i++)	//循环建立字符结点
	{
		p = new LinkNode();
		p->data = cstr[i];
		r->next = p;	//将*p结点插入到尾部
		r = p;
	}
	r->next = NULL;	//尾结点的next置为NULL
	return *this;
}

int LinkStringClass::StrLength()
{
	int i=0;
	LinkNode *p = head->next;	//p指向第一个字符结点
	while(p != NULL)
	{
		i++;
		p = p->next;	//p移到下一个字符结点
	}
	return i;
}

void LinkStringClass::DispStr()
{
	LinkNode *p = head->next;	//p指向链串的头结点
	while(p != NULL)
	{
		cout << p->data;
		p = p->next;	//p指向下一个结点
	}
	cout << endl;
}

void LinkStringClass::delabc()
{
	LinkNode *p = head,*p1,*p2,*p3;	//创建空的串指针
	while(p->next->next->next != NULL )
	{
		p1 = p->next;
		p2 = p1->next;
		p3 = p2->next;
		if(p1->data == 'a' && p2->data == 'b' && p3->data == 'c')
			p->next = p3->next;	//p指向后一个结点
		p = p->next;
	}
}

int main()
{
	char a[100];
	cout << "请输入一个字符串:";
	cin >> a;
	LinkStringClass s;
	s = a;
	s.delabc();
	cout << "删除所有abc后,该字符串为:";
	s.DispStr();
	return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值