-
Notifications
You must be signed in to change notification settings - Fork 0
/
MyString.cpp
154 lines (141 loc) · 3.16 KB
/
MyString.cpp
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include "MyString.h"
#include <string.h>
using std::cout;
using std::endl;
MyString::MyString()
{
_capacity = 16;
_length = 0;
_string = new char[_capacity + 1];
_string[0] = '\0';
}
MyString::MyString(const char * aCString)
{
_capacity = strlen(aCString);
_length = _capacity;
_string = new char[_capacity + 1];
for (int i = 0; i < _capacity; i++)
{
_string[i] = aCString[i];
}
_string[_length] = '\0';
}
MyString::MyString(int numChars)
{
_capacity = numChars;
_length = 0;
_string = new char[_capacity + 1];
_string[0] = '\0';
}
void MyString::Append(const MyString & aMyString)
{
//set capacity
int tempCapacity = _length + aMyString._length;
//point old to different location
char* tempString = _string;
//allocate new string
char* _string = new char[tempCapacity + 1];
for (int i = 0; i < _capacity; i++)
{
_string[i] = tempString[i];
}
//deallocate old string
delete [] tempString;
for (int i = 0; i < tempCapacity; i++)
{
_string[i+_length] = aMyString._string[i];
}
//finalize values
_capacity = tempCapacity;
_length = _capacity;
_string[_length] = '\0';
}
void MyString::Append(const char * aCString)
{
//set capacity
_capacity = _length + strlen(aCString);
//point to old string
char *tempString = _string;
//allocate new string
char *_string = new char[_capacity + 1];
for (int i = 0; i < _length; i++)
{
_string[i] = tempString[i];
}
//deallocate old string
delete [] tempString;
for (int i = 0; i < strlen(aCString); i++)
{
_string[i + _length] = aCString[i];
}
//finalize values
_length = _capacity;
_string[_length] = '\0';
}
void MyString::Assign(const MyString & aMyString)
{
//set new length
_length = aMyString._length;
if (_capacity < _length)
{
delete [] _string;
_capacity = _length;
char *_string = new char [_capacity + 1];
}
for (int i = 0; i < _length; i++)
{
_string[i] = aMyString._string[i];
}
_capacity = _length;
_string[_length] = '\0';
cout << _string << endl;
}
void MyString::Assign(const char * const aCString)
{
_length = strlen(aCString);
if (_capacity < _length)
{
_capacity = _length;
char *_string = new char [_capacity + 1];
}
for (int i = 0; i < _length; i++)
{
_string[i] = aCString[i];
}
_capacity = _length;
_string[_length] = '\0';
cout << _string << endl;
}
char MyString::At(int index) const
{
if (index <= 0 || index >= _length)
{
cout << "Index is out of bounds" << endl;
return 0;
}
else
{
return _string[index];
}
}
void MyString::Clear()
{
char *_string = new char [capacity + 1];
_length = 0;
_string[_length] = '\0';
}
void MyString::Clear(int newCapacity)
{
if (newCapacity < 0)
{
cout << "Capacity out of bounds" << endl;
return 0;
}
else
{
_capacity = newCapacity;
char *_string = new char [_capacity +1];
_length = 0;
_string[_length] = '\0';
}
}