目的,实现自定义类型字符串,部分运算符重载。
#include
#include<string.h>
#include
class String
{
public:
String(){}
String(char* ptr)
{
mptr = new charstrlen(ptr) + 1;
strcpy_s(mptr, strlen(ptr) + 1, ptr);
}
const String operator +(const char *source)
{
char * tmp = new char[strlen(mptr)+strlen(source) + 1]();
strcpy_s(tmp, strlen(mptr) + 1,mptr);
strcat(tmp,source);
String strtmp(tmp);
return strtmp;
}
bool operator <(const String& rhs)
{
return strcmp(mptr,rhs.mptr) < 0;
}
bool operator != (const String& rhs)
{
return strcmp(mptr,rhs.mptr)!=0;
}
char& operator[](int i)
{
return mptr[i];
}
~String()
{
delete[] mptr;
mptr = NULL;
}
private:
char* mptr;
friend const String operator +(const char * ,const String& );
friend std::ostream& operator <<(std::ostream& out,const String& rhs);
friend std::istream& operator >>(std::istream& in, String& rhs);
};
const String operator +(const char *source,const String& rhs)
{
char * tmp = new charstrlen(rhs.mptr)+strlen(source) + 1;
strcpy_s(tmp, strlen(source) + 1,source);
strcat(tmp,rhs.mptr);
String strtmp(tmp);
return strtmp;
}
std::ostream& operator <<(std::ostream& out,const String& rhs)
{
out << rhs. mptr;
return out;
}
std::istream& operator >>(std::istream& in, String& rhs)
{
char * tmp = new char1000;
memset(tmp,0,1000);
in >> tmp;
strcpy_s(rhs.mptr, strlen(tmp) + 1,tmp);
delete tmp;
return in;
}
int main()
{
String str1(“hello”);
String str2 = str1 + “world”;
String str3 = "hi " + str1;
if (str1 < str3)
{
std::cout << str1 << std::endl;
}
if (str1 != str2)
{
std::cout << str1[0] << std::endl;
}
String str;
std::cin >> str;
std::cout << "str : " << str << std::endl;
return 0;
}
1982



被折叠的 条评论
为什么被折叠?



