#include"wz.h" #include"sts.h" class _string { friend std::istream& operator>>(std::istream& is, _string& a);//bug 1 2 friend std::ostream& operator<<(std::ostream& os,_string& a); public: _string() //默认构造函数 { length = 0; b=new char[1]; b[0]=‘\0‘; } _string(char *a); //构造函数 _string(int n,char a); ~_string(); //析构函数 _string(_string &a); //复制构造函数 int size(){return length;} //获得字符串长度 _string operator+(const _string& a); //重载‘+‘操作符 _string& operator+=(const _string& a); //重载‘+=‘操作符 _string& operator=(const _string& a); //重载赋值操作符 int operator<(const _string &a); int operator>(const _string &a); char& operator[]( int n); //重载下标操作符 _string substr(int pos,int n); //返回子字符串 _string substr(int pos); //返回子字符串 private: char *b; int length; }; _string::_string(char *a) //构造函数 { length = strlen(a); b = new char[length+1]; for(int i= 0;i<length;i++) { b[i] = a[i]; } b[length] = ‘\0‘; } _string::_string(int n,char a) { b=new char[n+1]; for(int i= 0;i<n;i++) { b[i] =a; } b[n] = ‘\0‘; } _string::~_string() //析构函数 { delete []b; length=0; } _string::_string(_string &a) //复制构造函数 { length=a.size(); b=new char [length+1]; for(int i = 0;i<length;i++) { b[i] = a.b[i]; } b[length] = ‘\0‘; } _string _string::operator+(const _string& a) //重载+ { int newLen = length+a.length; char *str; str = new char[newLen+1]; int count = 0; for(int i = 0;i<length;i++) { str[i] = this->b[i]; count++; } for(int i =0;count<newLen;count++,i++) { str[i] = a.b[i]; } str[newLen] = ‘\0‘; _string temp(str); return temp; } _string& _string:: operator+=(const _string& a) //重载+= { int newLen = length+a.length; char *str; str = new char[newLen+1]; int count = 0; for(int i = 0;i<length;i++) { str[i] = this->b[i]; count++; } for(int i =0;count<newLen;count++,i++) { str[i] = a.b[i]; } str[newLen] = ‘\0‘; _string temp(str); *this=temp; return *this; } _string& _string:: operator=(const _string &a) //重载= { if(this==&a) return *this; delete []b; length = a.length; b = new char[length+1]; for(int i = 0;i<length;i++) { b[i] = a.b[i]; } b[length] = ‘\0‘; return *this; } int _string:: operator<(const _string &a) { while (*this->b == *a.b) { if (*this->b == ‘?‘) { return 0; } this->b++; b++; } if (*this->b - *a.b < 0) { return 1; } else return 0;; } int _string:: operator>(const _string &a) { while (*this->b == *a.b) { if (*this->b == ‘?‘) { return 0; } this->b++; b++; } if (*this->b - *a.b >0) { return 1; } else return 0;; } char& _string:: operator[]( int n) //重载下标操作符 { if(n>length) return b[length-1]; else return b[n]; } ostream& operator<<(ostream& os, _string& a) //重载输出符 { os<<a.b<<endl; return os; } /* istream& operator>>(std::istream& is, _string& a) //重载输入符 { // 1 while(*a.b!=‘\0‘) // {is>>a.b ;} //2 a.b=new char[256]; is>>a.b ; a.length=strlen(a.b); return is; } */ // 5 istream& operator>>(istream &is, _string &str)//输入 { char tem[1000]; //简单的申请一块内存 is.get(tem,1000,‘\n‘); str.length = strlen(tem); str.b = new char[str.length + 1]; strcpy(str.b, tem); return is; } _string _string::substr(int pos, int n) //两个接受不同参数的substr函数,返回子字符串 { char *p = new char[n+1]; for(int i=0;i<n;i++) { p[i]=b[pos]; pos++; } p[n]=‘\0‘; _string k(p); k.length=n; return k; } _string _string::substr(int pos) { int len=length; char *p=new char[len-pos+1]; int t=pos; for(int i=0;t<len;t++,i++) { p[i]=b[t]; } p[t]=‘\0‘; _string k(p); k.length=len-pos; return k; } int main (){; _string a; cin>>a; cout<<a; return 0; return 0;}
为了输入能 带空格 但是 这里可能有bug即失去第一个字符
时间: 2024-10-05 21:29:49