欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

将字符串中abc删除

程序员文章站 2022-03-03 17:06:00
...

//设计一个算法,将一个链串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;
}
相关标签: 字符串