⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.cpp

📁 比较简陋的数据库应用,唯一能看的就是对ODBC的封装...
💻 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 + -