String.h实现

String.h
1 #pragma once 2 #include <iostream> 3 4 #pragma warning(disable:4996) 5 6 using namespace std; 7 8 class String 9 { 10 private: 11 friend String operator+(const String& lhs, const String& rhs); 12 friend String operator-(const String& lhs, const String& rhs); 13 friend ostream& operator<<(ostream& out, const String& src); 14 friend istream& operator>>(istream& in, String& src); 15 16 public: 17 String(char* ptr = NULL); 18 ~String(); 19 String(const String& src); 20 21 public: 22 bool operator>(const String& src); 23 bool operator<(const String& src); 24 bool operator==(const String& src); 25 bool operator!=(const String& src); 26 String& operator=(const String& src); 27 28 int length()const; 29 const char* c_str()const { return Str; } 30 31 private: 32 char* Str; 33 34 };
String.cpp
1 #include "String.h" 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 6 #pragma warning(disable:4996) 7 8 int String::length()const { return strlen(this->Str); } 9 10 String::String(char* ptr) 11 { 12 if (ptr == NULL) 13 { 14 Str = new char[1]; 15 *Str = '\0'; 16 } 17 else 18 { 19 Str = new char[strlen(ptr) + 1]; 20 strcpy(Str, ptr); 21 } 22 } 23 String::~String() 24 { 25 delete[]Str; 26 Str = NULL; 27 } 28 String::String(const String& src) 29 { 30 Str = new char[src.length() + 1]; 31 strcpy(Str, src.Str); 32 } 33 34 String& String::operator=(const String& src) 35 { 36 if (this == &src) 37 { 38 return*this; 39 } 40 delete[]Str; 41 Str = NULL; 42 Str = new char[src.length() + 1]; 43 strcpy(Str, src.Str); 44 return *this; 45 } 46 47 bool String::operator>(const String& src) { 48 return strcmp(Str, src.Str) > 0; 49 } 50 bool String::operator<(const String& src) { 51 return strcmp(Str, src.Str) < 0; 52 } 53 bool String::operator==(const String& src) { 54 return strcmp(Str, src.Str) == 0; 55 } 56 bool String::operator!=(const String& src) { 57 return strcmp(Str, src.Str) != 0; 58 } 59 60 String operator+(const String& lhs, const String& rhs) 61 { 62 char* ptmp = new char[lhs.length() + rhs.length() + 1]; 63 strcpy(ptmp, lhs.Str); 64 strcat(ptmp, rhs.Str); 65 String tmp(ptmp); 66 delete ptmp; 67 return tmp; 68 } 69 70 String operator-(const String& lhs, const String& rhs) { 71 char* str1 = new char[lhs.length() + 1]; 72 char* str2 = new char[rhs.length() + 1]; 73 strcpy(str1, lhs.Str); 74 strcpy(str2, rhs.Str); 75 int nA = lhs.length(), nB = rhs.length(); 76 char* ptmp = new char[lhs.length() + 1]; 77 78 bool flag = true; 79 int k = 0; 80 for (size_t i = 0; i < strlen(str1); ++i) { 81 for (size_t j = 0; j < strlen(str2); ++j) { 82 if (str1[i] == str2[j]) { 83 flag = false; 84 break; 85 } 86 } 87 if (flag) { 88 ptmp[k] = str1[i]; 89 ++k; 90 } 91 flag = true; 92 } 93 char* str = new char[k+1]; 94 for (int i = 0 ; i < k; ++i) { 95 str[i] = ptmp[i]; 96 } 97 98 str[k] = '\0'; 99 100 String tmp(str); 101 delete[] ptmp; 102 delete[]str1; 103 delete[] str2; 104 return tmp; 105 } 106 107 ostream& operator<<(ostream& out, const String& src) 108 { 109 out << src.Str << endl; 110 return out; 111 } 112 113 istream& operator>>(istream& in, String& src) 114 { 115 char buff[1024] = { 0 }; 116 in >> buff; 117 delete[]src.Str; 118 src.Str = new char[strlen(buff) + 1]; 119 strcpy(src.Str, buff); 120 return in; 121 }
main.cpp
#include <iostream> #include "String.h" using namespace std; String str; void Operate_Biu(); void Menu() { cout << "\t\t*************字符串类的实现与设计***********" << endl; cout << "\t\t* 1.字符串输入 *" << endl; cout << "\t\t* 2.字符串运算 *" << endl; cout << "\t\t* 3.字符串输出 *" << endl; cout << "\t\t* 0.退出程序 *" << endl; cout << "\t\t********************************************" << endl; } void Operate_Menu() { system("cls"); cout << "\t\t*************字符串运算***********" << endl; cout << "\t\t* 1.字符串连接 *" << endl; cout << "\t\t* 2.字符串剩余子串 *" << endl; cout << "\t\t* 3.字符串比较 *" << endl; cout << "\t\t**********************************" << endl; Operate_Biu(); } void Input() { cout << "请输入字符串:" << endl; cin >> str; cout << "输入成功!" << endl; } void Output() { cout << "输出字符串:" << str << endl; cout << "输出成功!" << endl; } void Operate_Biu() { int op; String str1, str2; cout << "请输入操作数:" << endl; cin >> op; cout << "请输入两个字符串:" << endl; cin >> str1 >> str2; switch (op) { case 1: cout << "字符串连接:"; cout << str1 + str2 << endl; break; case 2: cout << "字符串相减:"; cout << str1 - str2 << endl; break; case 3: cout << "字符串比较:"; if (str1 > str2) cout << str1 << "较大" << endl; else if (str1 == str2) cout << str1 << "与" << str2 << "相等" << endl; else cout << str2 << "较大" << endl; break; } } int main() { int choose; while (1) { Menu(); cout << "请输入操作:"; cin >> choose; switch (choose) { case 1: Input(); break; case 2: Operate_Menu(); break; case 3: Output(); break; default: cout << "没有该选项,请重新输入!" << endl; break; } system("PAUSE"); system("cls"); } system("PAUSE"); }

浙公网安备 33010602011771号