用C++实现一个String类,它具有比较,连接,输入,输出功能,并且提供一些测试实例说明如何使用这个类。注意不要使用MFC,STL以及其他库。
解析:
要实现这些功能,需要重载的运算符:
1 < >,==和 != 比较运算符。
2 +=连接运算符以及赋值运算符。
3 输出,输入运算符。
mystring.h 文件
- #ifndef STRING_H
- #define STRING_H
- #include <ostream>
- #include <istream>
- using namespace std;
- class mystring{
- public:
- mystring();
- mystring(int n,char c);
- mystring(const char* source);
- mystring(const mystring &s);
- mystring& operator =(const mystring &s);
- mystring& operator =(const char *s);
- ~mystring();
- char & operator [](int i);
- const char & operator [](int i) const;
- mystring & operator +=(const mystring & s);
- mystring & operator +=(const char *s);
- friend ostream& operator <<(ostream &out,mystring &s);
- friend istream& operator >>(istream &in,mystring &s);
- friend bool operator <(const mystring &left,const mystring &right);
- friend bool operator >(const mystring &left,const mystring &right);
- friend bool operator ==(const mystring &left,const mystring &right);
- friend bool operator !=(const mystring &left,const mystring &right);
- const char *getdata() const;
- int getlength() const;
- protected:
- private:
- int size;
- char *data;
- };
-
- #endif
mystring.cpp文件
-
-
-
- #include "stdafx.h"
- #include "mystring.h"
- #include <iostream>
- using namespace std;
- mystring::mystring(){
- data=new char[1];
- *data='\0';
- size=0;
- }
- mystring::mystring(int n, char c){
- data=new char[n+1];
- for (int i=0;i<n;i++)
- {
- data[i]=c;
- }
- data[n]='\0';
- size=n;
- }
- mystring::mystring(const char *source){
- if (source==NULL)
- {
- data=new char [1];
- *data='\0';
- size=0;
- }
- else{
- data=new char[strlen(source)+1];
- strcpy(data,source);
- size=strlen(source);
- }
- }
- mystring::mystring(const mystring &s){
- data=new char[s.size+1];
- strcpy(data,s.data);
- size=s.size;
- }
- mystring& mystring::operator =(const mystring &s){
- if (this==&s)
- {
- return *this;
- }
- if (data!=NULL)
- {
- delete [] data;
- }
- data =new char[s.size+1];
- strcpy(data,s.data);
- return *this;
- }
- mystring& mystring::operator =(const char *s){
- if (data!=NULL)
- {
- delete [] data;
- }
- size=strlen(s);
- data =new char[size+1];
- strcpy(data,s);
- return *this;
- }
- mystring::~mystring(){
- if (data!=NULL)
- {
- delete [] data;
- data=NULL;
- size=0;
- }
- }
-
- char & mystring::operator [](int i){
- return data[i];
- }
- const char & mystring::operator [](int i) const{
- return data[i];
- }
- mystring & mystring::operator +=(const mystring &s){
- char *temp=data;
- size=s.size+size;
- data =new char[size+1];
- strcpy(data,temp);
- strcat(data,s.data);
- delete [] temp;
- return *this;
- }
- mystring & mystring::operator +=(const char *s){
- if (s==NULL)
- {
- return *this;
- }
- size=strlen(s)+size;
- char *temp=data;
- data =new char[size+1];
- strcpy(data,temp);
- strcat(data,s);
- delete [] temp;
- return *this;
- }
- ostream& operator <<(ostream &out,mystring &s){
- out<<s.getdata()<<endl;
- return out;
- }
-
- istream & operator >>(istream &in,mystring &s){
- char p[50];
- in.getline(p,50);
- s=p;
- return in;
- }
-
- bool operator <(const mystring &left,const mystring &right){
- int i=0;
- while (left[i]==right[i] && left[i]!='\0' && right[i]!='\0'){
- i++;
- }
- return left[i]-right[i]<0?true:false;
- }
- bool operator >(const mystring &left,const mystring &right){
- int i=0;
- while (left[i]==right[i] && left[i]!='\0' && right[i]!='\0')
- {
- i++;
- }
- return left[i]-right[i]>0?true:false;
- }
- bool operator ==(const mystring &left,const mystring &right){
- int i=0;
- while (left[i]==right[i] && left[i]!='\0' && right[i]!='\0')
- {
- i++;
- }
- return left[i]==right[i]?true:false;
- }
- bool operator !=(const mystring &left,const mystring &right){
- int i=0;
- while (left[i]==right[i] && left[i]!='\0' && right[i]!='\0')
- {
- i++;
- }
- return left[i]-right[i]!=0?true:false;
- }
- const char * mystring::getdata() const{
- return data;
- }
- int mystring::getlength() const{
- return size;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- mystring str(3,'a');
- mystring str1(str);
- mystring str2("asdf");
- mystring str3;
- cout<<"str:"<<str<<endl;
- cout<<"str1:"<<str1<<endl;
- cout<<"str2:"<<str2<<endl;
- cout<<"str3:"<<str3<<endl;
- str3 =str2;
- cout<<"str3:"<<str3<<endl;
- str3="12ab";
- cout<<"str3:"<<str3<<endl;
- cout<<"str3[2]:"<<str3[2]<<endl;
- str3+="111";
- cout<<"str3:"<<str3<<endl;
- str3+=str1;
- cout<<"str3:"<<str3<<endl;
-
- cin>>str1;
- cout<<"str1:"<<str1<<endl;
-
-
- mystring t1="1234";
- mystring t2="1234";
- mystring t3="12345";
- mystring t4="12335";
- cout<<"t1==t2?"<<(t1==t2)<<endl;
- cout<<"t1<t3?"<<(t1<t3)<<endl;
- cout<<"t1>t4?"<<(t1>t4)<<endl;
- cout<<"t1!=t4?"<<(t1!=t4)<<endl;
- getchar();
- return 0;
- }