将字符串中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;
}
上一篇: mysql基础知识点
下一篇: Whitelabel Error Page There was an unexpected error (type=Not Found, status=404). No message availab
推荐阅读