-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqh_string.cc
executable file
·80 lines (67 loc) · 1.27 KB
/
qh_string.cc
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
#include "qh_string.h"
#include <string.h>
#include <stdlib.h>
#include <stdexcept>
namespace qh
{
// TODO ½«ÔÚÕâÀïдʵÏÖ´úÂë
string::string()
: data_(NULL), len_(0)
{
}
string::string( const char* s )
{
if(s == NULL) return;
len_ = strlen(s);
data_ = new char[len_+1];
strcpy(data_,s);
}
string::string( const char* s, size_t len )
{
len_ = len;
data_ = new char[len_+1];
*(data_+len_)='\0';
strncpy(data_,s,len);
}
string::string( const string& rhs )
{
len_ = rhs.len_;
data_ = new char[len_+1];
strcpy(data_,rhs.c_str());
}
string& string::operator=( const string& rhs )
{
if(this == &rhs) return *this;
char *d = (char *)realloc(data_,sizeof(char)*(rhs.size()+1));
data_ = d;
strcpy(data_,rhs.data());
len_ = rhs.size();
return *this;
}
string::~string()
{
if(len_ != 0){
delete[] data_;
data_ = NULL;
}
}
size_t string::size() const
{
return len_;
}
const char* string::data() const
{
return data_;
}
const char* string::c_str() const
{
return data_;
}
char& string::operator[]( size_t index )
{
if(index >= len_){
throw std::out_of_range("index out of range");
}
return data_[index];
}
}