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; }
查看全文
相关阅读:
抓包工具 Fiddler 使用介绍
HTTP 协议常见首部字段
HTTP 协议服务器相关概念
HTTP 协议常见的状态码
HTTP 协议中 GET 和 POST 方法详解
设置html title标题左侧的小图标
HTML页面如何判断是手机访问还是电脑访问
使用Java的Frame类编写的QQ登录界面
swing中JTable的使用方法
采用MVC模式JDBC演示案例
原文地址:https://www.cnblogs.com/seebro/p/2476529.html
最新文章
mysql 客户端命令行下 直接查询并导出数据
转!!关于java类初始化顺序
原!!关于java 单元测试Junit4和Mock的一些总结
转!! 关于jsp编码设置 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
转!! Eclipse设定和修改文件字符编码格式和换行符
Redis安装系统服务1073错误
thinkphp在app接口开发过程中的通讯安全认证
PHP开发api接口安全验证
Windows下安装Redis及php的redis拓展教程
php redis 单例模式
热门文章
php的单例模式
tp5生成纯静态html
安装完 swoole 后出现 PHP Warning: PHP Startup: Unable to load dynamic library 'swoole.so'的解决方法
Centos 7 手把手教你使用YUM方式安装并配置Nginx+php7-fpm+MySQL
swoole1.8.0+版本异步redis安装(本实例为swoole1.8.10版本)详解
微信小程序客服消息新增临时素材接口java实现
SpringMVC 使用 MultipartFile 实现文件上传
Java 使用 Map 实现缓存工具
SpringBoot 项目打包后运行报 org.apache.ibatis.binding.BindingException
MySQL-5.7.19 在阿里云 CentOS-7.0 上的安装
Copyright © 2011-2022 走看看