📄 string.cpp
字号:
#include "String.h"
String::String() : lenth(0), str(NULL)
{}
String::String(const char* achstr)
{
int i;
for (i = 0; achstr[i] != '\0'; i++)
;
lenth = i;
str = new unsigned char[lenth + 1];
for (i = 0; i < lenth; i++)
str[i] = (unsigned char)achstr[i];
str[i] = '\0';
}
String::String(const char ch, int num)
{
if (num == 1)
{
if (ch == '\0')
{
str = new unsigned char[1];
str[0] = '\0';
lenth = 0;
}
else
{
str = new unsigned char[2];
str[0] = ch;
str[1] = '\0';
lenth = 1;
}
}
else
{
int i;
str = new unsigned char[num + 1];
for (i = 0; i < num; i++)
str[i] = (unsigned char)ch;
str[i] = '\0';
lenth = num;
}
}
String::String(const String& astr)
{
int i;
lenth = astr.lenth;
str = new unsigned char[lenth + 1];
for (i = 0; i < lenth; i++)
str[i] = astr.str[i];
str[i] = '\0';
}
String::String(int num)
{
int i;
str = new unsigned char[num + 1];
for (i = 0; i < num + 1; i++)
str[i] = '\0';
lenth = 0;
}
String::~String()
{
delete [] str;
str = NULL;
}
String& String::operator=(const String& astr)
{
int i;
if (this != &astr)
{
delete [] str;
lenth = astr.lenth;
str = new unsigned char[lenth + 1];
for (i = 0; i < lenth + 1; i++)
str[i] = astr.str[i];
}
return *this;
}
String& String::operator=(const char ch)
{
if (str == NULL || lenth != 1 || str[0] != ch)
{
delete [] str;
if (ch != '\0')
{
str = new unsigned char[2];
str[0] = ch;
str[1] = '\0';
lenth = 1;
}
else
{
str = new unsigned char[1];
str[0] = '\0';
lenth = 0;
}
}
return *this;
}
String& String::operator+=(const String& astr)
{
unsigned char *temp;
int i, j;
j = lenth;
lenth += astr.lenth;
temp = new unsigned char[lenth + 1];
for (i = 0; i < j; i++)
temp[i] = str[i];
for (i = 0; i < astr.lenth; i++)
temp[i + j] = astr.str[i];
temp[i + j] = '\0';
delete [] str;
str = temp;
return *this;
}
bool String::operator==(const String& astr) const
{
int i;
if (lenth != astr.lenth)
return false;
else
{
for (i = 0; i < lenth; i++)
{
if (str[i] != astr.str[i])
return false;
}
return true;
}
}
bool String::operator!=(const String& astr) const
{
return !((*this) == astr);
}
bool String::empty() const
{
return lenth == 0;
}
int String::getlenth() const
{
return lenth;
}
int String::reGetlenth()
{
for (int i = 0; str[i] != '\0'; i++)
;
lenth = i;
return lenth;
}
int String::find(const char ch) const
{
int i;
for (i = 0; i < lenth; i++)
{
if (str[i] == (unsigned char)ch)
return i;
}
return -1;
}
String::operator unsigned char *()
{
return str;
}
char String::getChar(int i)
{
if (i >= 0 && i < lenth)
return str[i];
return '\0';
}
String String::getSub(int beg, int end)
{
if (beg < 0)
return '\0';
String temp(lenth);
for (int i = beg; i < end + 2 && i < lenth + 1; i++)
temp.str[i - beg] = str[i];
if (end >= lenth - 1)
temp.lenth = lenth - beg;
else
{
temp.str[i - 1] = '\0';
temp.lenth = end - beg + 1;
}
return temp;
}
void String::Set(int len)
{
int i;
if (lenth != len)
{
delete [] str;
lenth = len;
str = new unsigned char[lenth + 1];
for (i = 0; i < lenth + 1; i++)
str[i] = '\0';
}
}
int String::intoInt()
{
int i, ret = 0;
for (i = 0; i < lenth; i++)
ret = ret * 10 + str[i] - '0';
return ret;
}
double String::intoDouble()
{
return 9.9;
}
String operator+(const String& lstr, const String& rstr)
{
String astr(lstr);
astr += rstr;
return astr;
}
std::ostream& operator<<(std::ostream& out, const String& astr)
{
int i;
for (i = 0; i < astr.lenth && astr.str[i] != '\0'; i++)
out << astr.str[i];
return out;
}
std::istream& operator>>(std::istream& in, String& astr)
{
char *temp = new char[MAX_STRING + 1];
in.getline(temp, MAX_STRING);
astr = String(temp);
delete [] temp;
return in;
}
String intoString(int i)
{
char temp[100], buffer[100];
int j = 0;
while (i / 10 != 0 || i % 10 != 0)
{
temp[j++] = i % 10 + '0';
i /= 10;
}
j--;
i = 0;
while (j >=0)
{
buffer[i++] = temp[j--];
}
buffer[i] = '\0';
return String(buffer);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -