Extras din laborator
// supraincarcare operator de indexare
char & string::operator [ ] (int index){
assert (index <= lgbuf);
return buf[index];
}
// formare subsir
string string::substr (int start, int lung){
assert (start + lung <= length());
string sub; // subsir rezultat
sub.resize (lung, ' '); // dimensionare
for (int i = 0; i < lung; i++)
sub[i] = buf[start + i]; // copiere din sir
return sub;
}
// sterge lung caractere incepand cu start
void string::remove (int start, int lung){
// calcul unde se termina zona stearsa
int stop = start + lung;
// muta caractere
while ((stop < lgbuf) && (buf[stop] != '�'))
buf[start++] = buf[stop++];
buf[start] = '�';
}
// inserare sirnou, incepand din pos
void string::insert (int pos, string & sirnou){
int lung = length(); // lungime curenta
int lgss = sirnou.length(); // lungime suplimentara
int lgnoua = lung + lgss; // lungime noua
// daca estenecesar, realoca buffer
resize(lgnoua, '�');
// muta caractere existente
for (int i = lung; i > pos; i--)
buf[i + lgss] = buf[i];
// inserare caractere noi
for (int i = 0; i < lgss; i++)
buf[pos + i] = sirnou[i];
}
// inlocuieste intre start si start + lung sirnou
void string::replace (int start, int lung, string & sirnou){
remove (start, lung);
insert (start, sirnou);
}
// adauga argumentul string la sfarsitul stringului curent
void string::operator += (string & right){
insert (length(), right);
}
// concatenare doua stringuri
string operator + (string & st, string & dr){
string clone(left); // copiere argument stang
clone += right; // adauga argument drept
return clone; // intoarce rezultat
}
# if 0 // daca este deja defined, apare o eroare de compilare
// test mai mic lexicografic
int operator < (string & st, string & dr){
return strcmp(st.buf, dr.buf) < 0;
}
# endif
// cauta sirul destinatie
int string::find (string & dest, int start){
int lgdest = dest.length();
// stop este ultima pozitie posibla de start
int stop = length() - lgdest;
for (int i = start; i <= stop; i++) {
string text = substr(i, lgdest);
if (text == dest)
return i;
}
// nu s/a gasit subsir, intoarce indice in afara domeniului
return lgbuf;
}
Preview document
Conținut arhivă zip
- Clasa string simplificata.doc