7.12.2010 - add PIString

This commit is contained in:
peri4
2010-12-07 01:55:30 +03:00
parent e321b5187d
commit 08f214dbfa
10 changed files with 360 additions and 134 deletions

147
pistring.cpp Normal file
View File

@@ -0,0 +1,147 @@
#include "pistring.h"
PIString & PIString::operator +=(const char * str) {
int i = 0;
while (str[i] != '\0') push_back(str[i++]);
return *this;
}
PIString & PIString::operator +=(const string & str) {
int l = str.size();
for (int i = 0; i < l; ++i) push_back(str[i]);
return *this;
}
PIString & PIString::operator +=(const PIString & str) {
int l = str.size();
for (int i = 0; i < l; ++i) push_back(str[i]);
return *this;
}
bool PIString::operator ==(const PIString & str) const {
int l = str.size();
if (size() != l) return false;
for (int i = 0; i < l; ++i)
if (str[i] != at(i))
return false;
return true;
}
PIString PIString::mid(const int start, const int len) const {
PIString str;
int s = start, l = len;
if (l == 0) return str;
if (s < 0) {
l += s;
s = 0;
}
if (l < 0) {
for (int i = s; i < size(); ++i)
str += at(i);
} else {
if (l > size() - s)
l = size() - s;
for (int i = s; i < s + l; ++i)
str += at(i);
}
return str;
}
PIString & PIString::cutMid(const int start, const int len) {
int s = start, l = len;
if (l == 0) return *this;
if (s < 0) {
l += s;
s = 0;
}
if (l < 0)
erase(begin() + s, end());
else {
if (l > size() - s)
l = size() - s;
erase(begin() + s, begin() + s + l);
}
return *this;
}
PIString PIString::trimmed() const {
int st = 0, fn = 0;
for (int i = 0; i < size(); ++i)
if (at(i) != ' ' && at(i) != '\t')
{st = i; break;}
for (int i = size() - 1; i >= 0; --i)
if (at(i) != ' ' && at(i) != '\t')
{fn = i; break;}
return mid(st, fn - st + 1);
}
int PIString::find(const char str, const int start) {
for (int i = start; i < size(); ++i)
if (at(i) == str)
return i;
return -1;
}
int PIString::find(const PIString str, const int start) {
int l = str.size();
for (int i = start; i < size() - l + 1; ++i)
if (mid(i, l) == str)
return i;
return -1;
}
int PIString::findLast(const char str, const int start) {
for (int i = size() - 1; i >= start; --i)
if (at(i) == str)
return i;
return -1;
}
int PIString::findLast(const PIString str, const int start) {
int l = str.size();
for (int i = size() - l; i >= start; --i)
if (mid(i, l) == str)
return i;
return -1;
}
PIString PIString::toUpperCase() const {
PIString str(*this);
int l = str.size();
for (int i = 0; i < l; ++i) str[i] = chrUpr(str[i]);
return str;
}
PIString PIString::toLowerCase() const {
PIString str(*this);
int l = str.size();
for (int i = 0; i < l; ++i) str[i] = chrLwr(str[i]);
return str;
}
char chrUpr(char c) {
if (c >= 'a' && c <= 'z') return c + 'A' - 'a';
//if (c >= 'а' && c <= 'я') return c + 'А' - 'а';
return c;
}
char chrLwr(char c) {
if (c >= 'A' && c <= 'Z') return c + 'a' - 'A';
//if (c >= 'А' && c <= 'Я') return c + 'а' - 'А';
return c;
}