ex8_10.cpp

来自「C++程序设计课本源码,供学习计算机的大学生们参考」· C++ 代码 · 共 71 行

CPP
71
字号
#include "Ex8_10.h"
#include<string.h>

class StringObject:public Object{
	char* sptr;
public:
	StringObject();
	StringObject(char*);
	~StringObject();
	int Compare(Object &);
	void Print();
};
StringObject::StringObject(){sptr=NULL;}
StringObject::StringObject(char* s){
	sptr=new char[strlen(s)+1];//加一不可少,否则串结束符冲了其他信息,析构会出错!
	strcpy(sptr,s);
}
StringObject::~StringObject(){//虚函数重定义。撤销时可释放字符串
	if(sptr) delete[]sptr;
	cout<<"删除字符串类"<<endl;
}

int StringObject::Compare(Object & obj){//虚函数
	StringObject & temp=(StringObject &)obj;
	return (strcmp(sptr,temp.sptr));
}
void StringObject::Print(){cout<<sptr<<'\t';}//虚函数

void main(){
	Node * P1;
	StringObject* p;
	List list1,list2,list3;
	char *a[5]={"dog","cat","bear","sheep","ox"},*sp="cat";
	int i;
	for(i=0;i<5;i++){
		p=new StringObject(a[i]);//建立数据对象
		P1=list1.CreatNode();//建立结点
		P1->Linkinfo(p);//数据对象连接到结点
		list1.InsertFront(P1);//向前生成list1
		p=new StringObject(a[i]);
		P1=list2.CreatNode();
		P1->Linkinfo(p);
		list2.InsertRear(P1);//向后生成list2
	}
	list1.PrintList();
	cout<<"list1长度:"<<list1.Length()<<endl;
	list2.PrintList();
	cout<<"要求删除的字符串\"cat\""<<endl;
	p=new StringObject(sp);//为了程序的通用性只能多一次转换
	P1=list1.Find(*p);
	delete p;
	if(P1!=NULL){
		cout<<"删除cat:";
		P1=list1.DeleteNode(P1);
		delete P1;
		list1.PrintList();
		cout<<"list1长度:"<<list1.Length()<<endl; 
	}
	else cout<<"未找到"<<endl;
	cout<<"清空list1:";
	list1.MakeEmpty();//清空list1
	for(i=0;i<5;i++){
		p=new StringObject(a[i]);
		P1=list3.CreatNode();
		P1->Linkinfo(p);
		list3.InsertOrder(P1);//升序创建list1
	}
	list3.PrintList();
	cout<<"程序结束:";
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?