在c++中有一个新定义的类型string,可以不用那么麻烦的操作字符串,并且一些高级的运算符重载让她的使用更加便捷
下面是String类的定义和成员函数的定义:
#ifndef operator_operator_h
#define operator_operator_h
#include<iostream>
#include<string.h>
using namespace std;
class String
{
friend ostream& operator<<(ostream &out, const String &s);
friend istream& operator>>(istream &in, String &s);
public:
String(const char *str = NULL)
{
if(str == NULL)
{
m_data = new char[1];
m_data[0] = '\0';
}
else
{
m_data = new char[strlen(str)+1];
strcpy(m_data,str);
}
}
String(const String &s)
{
m_data = new char[strlen(s.m_data)+1];
strcpy(m_data,s.m_data);
}
String& operator=(const String &s)
{
if(this != &s)
{
free(m_data);
m_data = new char[strlen(s.m_data)+1];
strcpy(m_data,s.m_data);
}
return *this;
}
~String()
{
delete []m_data;
}
friend ostream& operator<<(ostream &out, const String &s)
{
out<<s.m_data;
return out;
}
friend istream& operator>>(istream &in, String &s)
{
in>>s.m_data;
return in;
}
String operator+(const String &s); //s = s1 + s2
String operator+=(const String &s); //s1 += s2
char& operator[](int index);
bool operator==(String &s);
bool operator!=(String &s);
bool operator>(String &s); //s1 > s2
bool operator<=(String &s);
bool operator<(String &s);
bool operator>=(String &s);
private:
char *m_data;
};
String String::operator+=(const String &s) //s1 += s2
{
m_data = new char[sizeof(m_data)+1];
strcat(m_data,s.m_data);
return *this;
}
String String::operator+(const String &s)//s = s1 + s2
{
strcat(m_data, s.m_data);
return *this;
}
bool String::operator==(String &s)
{
if(strcmp(m_data, s.m_data)==0)
return true;
return false;
}
bool String::operator!=(String &s)
{
if(strcmp(m_data,s.m_data)!=0)
return true;
return false;
}
bool String::operator>(String &s) //s1 > s2
{
if(strcmp(m_data,s.m_data)>0)
return true;
return false;
}
bool String::operator<=(String &s)
{
if(strcmp(m_data,s.m_data)>=0)
return true;
return false;
}
bool String::operator<(String &s)
{
if(strcmp(m_data,s.m_data)<0)
return true;
return false;
}
bool String::operator>=(String &s)
{
if(strcmp(m_data,s.m_data)<=0)
return true;
return false;
}
char& String::operator[](int index)
{
// char*p= m_data;
// return *(p+index);
return m_data[index];
}
#endif
再下面是测试程序:
#include "operator.h"
int main()
{
String s("s");
String s1("s");
String s2;
//String s3;
//s2 = s+s1;
//s+=s1;
//cout<<"s+=s1="<<s<<endl;
cout<<"s[2] = "<<s[0]<<endl;
// if(s == s1)
// cout<<1<<endl;
// if(s != s1)
// cout<<0<<endl;
// if(s > s1)
// cout<<"s>s1"<<endl;
// if(s >= s1)
// cout<<"s>=s1"<<endl;
// if(s < s1)
// cout<<"s<s1"<<endl;
// if(s <=s1)
// cout<<"s<=s1"<<endl;
//cin>>s3;
//cout<<"s3="<<s3<<endl;//请分开测试
return 0;
}
输入S3以后不知道为什么就成了大写