字符串

来源:互联网 发布:风险评估矩阵表 编辑:程序博客网 时间:2024/06/05 15:27

string.h

#ifdef STRING_H#define STRING_H#include<iostream>using namespace std;class String{public:String();String(int n,char c);String(const char *source);String(const String& s);String& operator=(char* s);~String();char & operator[](int i){return a[i];}const char& operator[](int i)const {return a[i];}String & operator +=(const String&s);friend istream& operator >>(istream &is,String &s);friend bool operator <(const String& left,const String& right);friend bool operator >(const String& left,const String& right);friend bool operator==(const String& left,const String& right);friend bool operator !=(const String& left,const String& right);int length();private:char *a;int size;};#endif


string.cpp

#include "String.h"#include <cstring>#include <cstdlib>String::String(){a = new char[1];a[0] = '\0';size = 0;}String::String(int n,char c){a = new char[n+1];memset(a,c,n);a[n] = '\0';size = n;}String::String(const char*source){if(source == NULL){a = new char[1];a[0] = '\0';size = 0; }else{size = strlen(source);a = new char[size+1];a[size] = '\0';}}//赋值构造函数中可以访问类的私有变量?String::String(const String& s){size = strlen(s.a);a = new char[size+1];strcpy(a,s.a);}//String &String::operator= (const String&s){if(this == &s)return *this;else{delete[] a;size = strlen(s.a);a = new char[size+1];strcpy(a,s.a);return *this;}}//String::~String(){delete[] a;}String& String::operator+= (const String &s){int j = strlen(a);int size = strlen(s.a)+j;char *tmp = new char[size+1];strcpy(tmp,a);strcpy(tmp+j,s.a);delete[] a;a = tmp;return *this;}//int String::length(){return strlen(a);}


.main

#include<iostream>#include "String.h"using namespace std;bool operator == (const String &left,const String& right){int a = strcmp(left.a,right.a);if(a == 0)return true;else{return false;}}//bool operator != (const String& left,const String &right){return !(left == right);}ostream& operator << (ostream& os,String& s){int length = s.length();for(int i = 0;i<length;i++)os << s[i];return os;}String operator+(const String &a,const String &b){String tmp;tmp = a;tmp += b;return tmp;}bool operator <(const String& left,const String& right){int j = 0;while((left[j]!=0)&&(right[j]!=0)){if(left[j]<right[j])return true;else{if(left[j] == right[j]){j++continue;}else{return false;}}}if(left[j] == '\0'&&right[j]!='\0')return true;elsereturn false;}bool operator >(const String& left ,const String& right){int a = strcmp(left.a,right.a);if(a >0)return ture;elsereturn flase;}istream& operator>>(isteam& is,String& s){delete[] s.a;s.a = new char[20];int m =20;char c;int i = 0;while(is.get(c)&&isspace(c));is(is){do{s.a[i] = c;i++;}if(i == m-1){s.a[i] == '\0';char* b = new char[m];strcpy(b,s.a);m = m*2;s.a = new char[m];strcpy(s.a,b);delete[] b;}}while(is.get(c)&&!isspace(c));if(is)is.unget();}s.size = i;s.a[i]='\0';return is;}Screen & display(std::ostream &os){return *this;}const Screen& display const (std::ostream&os){return *this;}int main(){}