Repository navigation
Expand file tree
/
Copy pathstring.h
More file actions
200 lines (197 loc) · 6.19 KB
/
Copy pathstring.h
File metadata and controls
200 lines (197 loc) · 6.19 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
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#ifndef STRING
#define STRING
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <iostream>
#include <stdexcept>
/**
* @file string.h.
* A String osztály header fájlja.
*/
/**
* String osztály, ami követi az std::string mintáját.
* A szövegkezelésért felelős osztály, ami lehetővé teszi a szövegekkel való műveleteket.
*/
class String{
char *data; /**< karakter pointer ami egy karakter tömbre mutat, aminek a végét '\0' jelzi.*/
size_t length; /**< a String hossza, a lezáró karaktert nem beleértve.*/
size_t pos; /**< a substr kihasználja mint mutató.*/
public:
/**
* Konstruktor.
* A Stringet az adott karaktertömb elemeivel inicializálja.
* @param karakter tömb.
*/
String(const char *);
/**
* Paraméter nélüli konstruktor.
* A Stringet 0 mérettel, egy '\0' karakterrel inicializálja.
*/
String();
/**
* Konstruktor.
* A Stringet 1 mérettel, a paraméterként kapott char-ral inicializálja.
* @param karakter.
*/
String(const char);
/**
* Másoló konstruktor.
* @param egy másik String objektum.
*/
String(const String&);
/**
* Konstruktor.
* A Stringet inicializálja az adott int szám alaki értékeinek számjegyeivel pl. a (int)100-ból "100"-at csinál.
* @param integer szám.
*/
String(const int);
/**
* Konstruktor.
* A Stringet inicializálja az adott uint32_t szám hexadecimális alaki értékeinek számjegyeivel.
* @param 32 bites unsigned int.
*/
String(const uint32_t);
/**
* Visszadja read-only-ként a String karaktertömbjének pointerjét.
* @return const char *.
*/
const char * c_string() const{
return data;
}
/**
* Visszadja a String hosszát.
* @return const size_t.
*/
const size_t getLength() const{
return length;
}
/**
* Visszadja, hogy a tárol szöveg minden karaktere angol abc-beli e.
* @return bool.
*/
bool isalpha() const;
/**
* Összefűző + operátor.
* Készít egy új Stringet amelyben a példányt összefűzi a paraméterként kapott másik Stringgel. Operator overload.
* @param rhs a hozzáfűzendő String.
* @return String.
*/
String operator+(const String& rhs) const;
/**
* Összefűző + operátor.
* Készít egy új Stringet amelyben a példányt összefűzi a paraméterként kapott másik T típusú változóval.
* Csak azokra a T típusokra működik amikre implementálva van a T->String konverzió (const char*, char, int, uint32_t).
* Operator overload.
* @param rhs a hozzáfűzendő változó.
* @return String.
*/
template<typename T>
String operator+(const T& rhs) const{
return *this + String(rhs);
}
/**
* Értékadó operátor.
* A példány eddigi tartalmát tölri, majd újra inicializálja a paraméter String értékeivel. Operator overload.
* @param rhs a példány új értéke.
* @return String& String referencia, tehát használható a balértékként is.
*/
String& operator=(const String&);
/**
* Értékadó operátor.
* A példány eddigi tartalmát tölri, majd újra inicializálja a paraméter értékeivel. Operator overload.
* Csak azokra a T típusokra működik amikre implementálva van a T->String konverzió (const char*, char, int, uint32_t).
* Operator overload.
* @param rhs a példány új értéke.
* @return String& String referencia, tehát használható a balértékként is.
*/
template<typename T>
String& operator=(const T& rhs){
return *this = String(rhs);
}
/**
* Hozzáfűző + operátor.
* A példányhoz hozzáfűzi a paraméterként kapott másik T típusú változót.
* Csak azokra a T típusokra működik amikre implementálva van a T->String konverzió (const char*, char, int, uint32_t).
* Operator overload.
* @param rhs a hozzáfűzendő változó.
* @return String.
*/
template<typename T>
String& operator+=(const T& rhs){
return *this = *this + rhs;
}
/**
* Indexelű operátor.
* Visszadja az adott indexű karaktert, ha az index a karaktertömb méreténél kisebb. Ellenkező esetben exceptiont dob.
* @param idx size_t index.
* @return char& referencia tehát használható balértékként.
*/
char& operator[](size_t idx){
if(idx < 0 || idx >= length) throw std::out_of_range("Az index a sztring határain kívül esik!");
else{
return data[idx];
}
}
/**
* Konstans indexelű operátor.
* Visszadja az adott indexű karaktert, ha az index a karaktertömb méreténél kisebb. Ellenkező esetben exceptiont dob.
* @param idx size_t index.
* @return const char& referencia.
*/
const char& operator[](size_t idx) const{
if(idx < 0 || idx >= length) throw std::out_of_range("Az index a sztring határain kívül esik!");
else{
return data[idx];
}
}
/**
* Összehasonlító operátor.
* Összehasonlítja a példányt egy másik Stringgel, és ez szerint visszatér egy bool-lal.
* @param rhs amivel összehasonlítunk.
* @return bool az összehasonlítás logikai értéke.
*/
bool operator&(const String&) const;
/**
* Needle in the haystack.
* Megnézi hogy az példány tartalmazza-e az adott karaktert.
* @param karakter.
* @return bool a keresés eredménye.
*/
bool operator==(char) const;
/**
* Rész stringet készít.
* Az adott karakterig vagy az EOF-ig kimásol egy rész stringet.
* Változtatja a pos változót, hogy a következő substr hívásnál már a következő rész stringet adja vissza.
* @param sep szeparátor karakter.
* @return String.
*/
String substr(const char );
/**
* Visszadja pos értékét.
*/
size_t getPos() const;
/**
* A szöveg összes abc-beli katarkterét nagy betűre cseréli.
*/
void toUpper();
/**
* A szöveg összes abc-beli katarkterét kis betűre cseréli.
*/
void toLower();
/**
* Destruktor.
* Fölszabadítja a dinamikusan foglalt karaktertömböt.
*/
~String();
};
/**
* Globális inserter operátor.
*/
std::ostream& operator<<(std::ostream& os, const String& rhs);
/**
* Globális extractor operátor.
* A whitespace-ket figyelmen kivűl hagyja.
*/
std::istream& operator>>(std::istream& is, String& rhs);
#endif // !STRING