-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstring.cpp
More file actions
124 lines (112 loc) · 2.17 KB
/
Copy pathstring.cpp
File metadata and controls
124 lines (112 loc) · 2.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
class string
{
friend std::ostream& operator<<(osstrem &os,const string &str);
friend std::istream& operator>>(isstream &is,string &str);
public:
string(const char*=nullptr);
~string(void);
string(const string &str);
string &operator=(const string& str);
string operator+(const string& str);
bool operator==(const string& str);
char& operator[](unsigned int e);
int getlength();
private:
char *m_data;
}
string::string(const char *str)
{
if(str==nullptr)
{
m_data=new char[1];
*m_data='\0';
}
else
{
m_data=new char[strlen(str)+1];
strcpy(m_data,str);
}
}
string::~string()
{
if(m_data)
{
delete[] m_data;
m_data=nullptr;
}
}
string::string(const string& str)
{
if(str.m_data==nullptr)
{
m_data=nullptr;
}
else
{
m_data=new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
}
}
string &string::operator=(const string&str)
{
if(this!=str)
{
delete[] m_data;
m_data=nullptr;
if(str.m_data==nullptr)
m_data=nullptr;
else
{
m_data=new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
}
}
return *this;
}
string string::operator+(const string &str)
{
string newstring;
if(str==nullptr)
return *this;
else if(m_data==nullptr)
{
newstring=str;
}
else
{
newstring.m_data=new char[strlen(str.m_data)+1+strlen(m_data)+1];
strcpy(newstring.m_data,m_data);
strcpy(newstring,str.m_data);
}
return newstring;
}
bool string::operator==(const srtring &str)
{
if(strlen(m_data)!=strlen(str.m_data))
return false;
else
{
return strcmp(m_data,str.m_data)?false:true;
}
}
char &string::operator[](unsigned int e)
{
if(e>=0&&e<=strlen(m_data))
return m_data[e];
}
int string::getlength()
{
return strlen(m_data);
}
ostream &operator<<(ostream &os,const string &str)
{
os<<str.m_data;
return os;
}
istream &operator>>(istream &is,string &str)
{
char buff[4096];
is>>buff;
str.m_data=buff;
return is;
}