String 类的实现
来源:互联网 发布:视频聚合软件 编辑:程序博客网 时间:2024/06/06 02:12
//String 类的实现#include <iostream>#include <stdio.h>#include <cstring>using namespace std;class String{public: String(const char *str = NULL); //通用构造函数 String(const String &str); //拷贝构造函数 ~String(); //析构函数 String operator+(const String &str) const; String& operator=(const String &str) ; String& operator+=(const String &str); bool operator==(const String &str) const; char& operator[](int n) const; size_t size() const; //获取长度 const char* c_str() const; //获取C字符串 friend istream& operator >> (istream &is, String &str); //输入 friend ostream& operator << (ostream &os, String &str); //输出private: char *data; size_t length;};//默认构造函数String::String(const char *str){ if (!str) { length = 0; data = new char[1]; *data = '\0'; } else { length = strlen(str); data = new char(length + 1); strcpy(data, str); }}//拷贝构造函数String::String(const String& str){ length = str.size(); data = new char(length + 1); strcpy(data, str.c_str());}//析构函数String::~String(){ delete[]data; length = 0;}//重载字符串String String::operator+(const String &str) const{ String newString; newString.length = length + str.size(); newString.data = new char[newString.length + 1]; strcpy(newString.data, data); strcat(newString.data, str.data); return newString;}//赋值运算符String& String::operator=(const String &str){ if (this == &str) { return *this; } delete[] data; //为了避免内存泄漏 length = str.length; data = new char[length + 1]; strcpy(data, str.c_str()); return *this;}String& String::operator +=(const String &str){ length += str.length; char *newData = new char[length + 1]; strcpy(newData, data); strcat(newData, str.data); delete[]data; data = newData; return *this;}inline bool String::operator==(const String &str) const{ if (length != str.length); return strcmp(data, str.data);}inline char& String::operator[](int n) const{ if (n >= length) { return data[length - 1]; //错误处理 } else { return data[n]; }}inline size_t String::size() const{ return length;}istream& operator >> (istream &is, String &str){ char tem[1000]; //简单的申请一块内存 is >> tem; str.length = strlen(tem); str.data = new char[str.length + 1]; strcpy(str.data, tem); return is;}ostream& operator<<(ostream &os, String &str){ os << str.data; return os;}inline const char* String::c_str() const { return data;}int main(){ String s; cin >> s; cout << s; return 0;}
阅读全文
0 0
- string类的实现
- String类的实现
- String类的实现
- String类的实现
- String 类的实现
- String类的实现
- string类的实现
- String类的实现
- String类的实现
- string类的实现
- string类的实现
- string类的实现
- string类的实现
- string类的实现
- string类的实现
- String 类的实现
- String类的实现
- String类的实现
- Keep-Alive与HttpURLConnection实现
- Ubuntu 安装nvidia显卡驱动
- 查询到的方法:不同服务器数据库之间的操作
- 微信端 vue 批量处理开发
- Java9的新特性
- String 类的实现
- RT-Thread 04任务间同步及通讯 -互斥量、事件、邮箱、消息队列
- 构造函数
- Java -- IO练习
- iOS XIB中imageView设置图片在运行的时候不显示
- 合并两个排序的链表
- 这可能是最好的RxJava 2.x 教程
- JavaEE 项目设计技术与编程标准
- 解决导入融云SDK后NoClassDefFoundError