zoukankan
html css js c++ java
String类封装
//Node.h typedef int Node_entry; typedef int Node_entry; enum Error_code {success, overflow, underflow, rangeError}; template <class Node_entry> struct Node { Node_entry entry; Node<Node_entry> *next; Node(); Node(Node_entry item, Node<Node_entry> *link = NULL); }; template <class Node_entry> Node<Node_entry>::Node() { next = NULL; } template <class Node_entry> Node<Node_entry>::Node(Node_entry item, Node<Node_entry> *link) { entry = item; next = link; } //List.h #include "Node.h" template<class List_entry> class List { public: List(); ~List(); bool empty() const; List(const List<List_entry> ©); List<List_entry> operator = (const List<List_entry> ©); Error_code insert(int position, const List_entry &x); Error_code retrieve(int position, List_entry &x); Error_code replace(int position, const List_entry &x); Error_code remove(int position); int size() const; void clear(); protected: int count; Node<List_entry> *head; Node<List_entry> *set_position(int position) const; }; template<class List_entry> Error_code List<List_entry>::remove(int position) { if (count == 0) return underflow; if (position < 0 || position >= count) return rangeError; Node<List_entry> *t, *target = set_position(position - 1); t = target->next; target->next = target->next->next; delete t; return success; } template<class List_entry> Error_code List<List_entry>::replace(int position, const List_entry &x) { if (position < 0 || position > count) return rangeError; Node<List_entry> *target = set_position(position); target->entry = x; return success; } template<class List_entry> int List<List_entry>::size() const { return count; } template<class List_entry> List<List_entry> List<List_entry>::operator = (const List<List_entry> ©) { List<List_entry> new_list(copy); clear(); head = new_list.head; count = new_list.count; new_list.count = 0; new_list.head = NULL; return *this; } template<class List_entry> void List<List_entry>::clear() { Node<List_entry> *t = head; while (!empty()) { head = t->next; delete t; t = head; } } template<class List_entry> bool List<List_entry>::empty() const { return head == NULL; } template<class List_entry> List<List_entry>::~List() { clear(); } template<class List_entry> Error_code List<List_entry>::retrieve(int position, List_entry &x) { if (position < 0 || position > count) return underflow; Node<List_entry> *t = set_position(position); x = t->entry; return success; } template<class List_entry> List<List_entry>::List(const List<List_entry> ©) { Node<List_entry> *new_node, *copy_copy = copy.head; if (copy.head == NULL) head = NULL; else { head = new_node = new Node<List_entry>(copy.head->entry); while (copy_copy->next != NULL) { copy_copy = copy_copy->next; new_node->next = new Node<List_entry>(copy_copy->entry); new_node = new_node->next; } } count = copy.count; } template<class List_entry> List<List_entry>::List() { head = NULL; count = 0; } template<class List_entry> Node<List_entry> *List<List_entry>::set_position(int position) const { Node<List_entry> *q = head; for (int i = 0; i < position; i++) q = q->next; return q; } template<class List_entry> Error_code List<List_entry>::insert(int position, const List_entry &x) { if (position < 0 || position > count) return rangeError; Node<List_entry> *new_node, *previous, *following; if (position > 0) { previous = set_position(position - 1); following = previous->next; } else following = head; new_node = new Node<List_entry>(x, following); if (new_node == 0) return overflow; if (position == 0) head = new_node; else previous->next = new_node; count++; return success; } //String.h #include <cstring> #include <iostream> #include "List.h" class String { public: String(); ~String(); String(const String ©); String(const char *copy); String(List<char> ©); String& operator = (const String ©); const char *c_str() const; void test(); protected: char *entries; int length; }; bool operator == (const String &first, const String &second); bool operator > (const String &first, const String &second); bool operator < (const String &first, const String &second); bool operator >= (const String &first, const String &second); bool operator <= (const String &first, const String &second); bool operator != (const String &first, const String &second); bool operator == (const String &first, const String &second) { return strcmp(first.c_str(), second.c_str()) == 0; } bool operator > (const String &first, const String &second) { return strcmp(first.c_str(), second.c_str()) > 0; } bool operator < (const String &first, const String &second) { return strcmp(first.c_str(), second.c_str()) < 0; } bool operator >= (const String &first, const String &second) { return strcmp(first.c_str(), second.c_str()) >= 0; } bool operator <= (const String &first, const String &second) { return strcmp(first.c_str(), second.c_str()) <= 0; } bool operator != (const String &first, const String &second) { return strcmp(first.c_str(), second.c_str()) != 0; } const char* String::c_str() const { return (const char *)entries; } String& String::operator = (const String ©) { delete [] entries; length = copy.length; entries = new char[length + 1]; strcpy(entries, copy.entries); return *this; } void String::test() { std::cout << entries ; } String::String(const char *in_string) { length = strlen(in_string); entries = new char[length + 1]; strcpy(entries, in_string); } String::String(List<char> &in_list) { length = in_list.size(); entries = new char[length + 1]; for (int i = 0; i < length; i++) in_list.retrieve(i, entries[i]); entries[length] = '\0'; } String::String() { length = 0; entries = new char[1]; strcpy(entries, ""); } String::~String() { delete [] entries; } String::String(const String ©) { length = copy.length; entries = new char[length + 1]; for (int i = 0; i < length; i++) entries[i] = copy.entries[i]; entries[length] = '\0'; } //trial.cpp #include <iostream> #include "String.h" using namespace std; class String; void main() { String a("ttt"); String b; String c; b = c = a; a.test(); cout << endl; b.test(); cout << endl; c.test(); cout << c.c_str() << endl; bool x = (a != b); cout << x; system("pause"); return; }
查看全文
相关阅读:
【洛谷P2839】middle
【洛谷P2495】消耗战
【CF1438D】Powerful Ksenia
【CF878E】Numbers on the blackboard
【洛谷U138580】简单的打击
【洛谷P4774】屠龙勇士
【GMOJ5363】生命之树
【YbtOJ#20075】区间异或
【YbtOJ#20077】计划带师
hdu 2688
原文地址:https://www.cnblogs.com/seebro/p/2476529.html
最新文章
mysql 权限管理 revoke 回收权限 命令
mysql 权限管理 目录
mysql 权限管理介绍
mysql 数据操作 多表查询 子查询 虚拟表介绍
mysql 数据操作 多表查询 子查询 带IN关键字的子查询
mysql 数据操作 多表查询 多表连接查询 全外连接
mysql 数据操作 多表查询 多表连接查询 外链接之左连接 右连接
mysql 数据操作 多表查询 多表连接查询 内连接
mysql 数据操作 多表查询 多表连接查询 笛卡尔积
mysql 数据操作 多表查询 目录
热门文章
POJ 1011
POJ 1008
POJ 1005
POJ 1007
POJ 1006
POJ 1003
POJ 1004
POJ 1002
POJ 1001
【洛谷P4284】概率充电器
Copyright © 2011-2022 走看看