|
|
|
|
//
|
|
|
|
|
// Created by lenfrex on 2022/4/4.
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
#include <cstring>
|
|
|
|
|
#include "CString.h"
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
CString::CString(int length) {
|
|
|
|
|
data = new char[length]();
|
|
|
|
|
CString::length = length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString::~CString() {
|
|
|
|
|
delete[] data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD>趨<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>512<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
CString::CString() : CString(512) {}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD>صȺš<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Java<EFBFBD><EFBFBD>String<EFBFBD><EFBFBD><EFBFBD><EFBFBD>equal()<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>֡<EFBFBD>
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD>ȱȽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD>false<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dataΪnullptr<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false
|
|
|
|
|
* <EFBFBD><EFBFBD>ͬ<EFBFBD>Ļ<EFBFBD><EFBFBD>ٱȽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<EFBFBD><EFBFBD><EFBFBD>ڴ棬ֱ<EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD>true
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>Ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱȽ<EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
bool CString::operator==(const CString &source) const {
|
|
|
|
|
// <EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>CString<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<EFBFBD><EFBFBD>Ա<EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|
|
|
|
if (source.length != length || data == nullptr) {
|
|
|
|
|
return false;
|
|
|
|
|
} else {
|
|
|
|
|
// <EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<EFBFBD><EFBFBD>Ա<EFBFBD>Ƿ<EFBFBD>ָ<EFBFBD><EFBFBD>ͬһ<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (source.data == data) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱȽ<EFBFBD>
|
|
|
|
|
int compareLength = source.length < length ? source.length : length;
|
|
|
|
|
for (int i = 0; i < compareLength; ++i) {
|
|
|
|
|
if (data[i] != source.data[i]) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* <EFBFBD><EFBFBD>Դ<EFBFBD>и<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µĶ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
CString::CString(char *source) : CString((int)strlen(source)) {
|
|
|
|
|
strncpy(data, source, length);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* <EFBFBD><EFBFBD>Դ<EFBFBD>и<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µĶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>С<EFBFBD><EFBFBD>Դ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᱻ<EFBFBD><EFBFBD>ȡ
|
|
|
|
|
*/
|
|
|
|
|
CString::CString(char *source, int length) : CString(length) {
|
|
|
|
|
strncpy(data, source, length);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString &CString::operator=(const CString &source) {
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD>ɶ<EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD>ֵ
|
|
|
|
|
if (this == &source) {
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (data != nullptr && length != 0) {
|
|
|
|
|
delete[] data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this->length = source.length;
|
|
|
|
|
this->data = new char[length]();
|
|
|
|
|
|
|
|
|
|
strncpy(data, source.data, length);
|
|
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString &CString::operator+=(const CString &source) {
|
|
|
|
|
if (data == nullptr && length == 0) {
|
|
|
|
|
this->length = source.length;
|
|
|
|
|
this->data = new char[length]();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char *tmp = new char[length]();
|
|
|
|
|
strncpy(tmp, data, length);
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD>ֹƴ<EFBFBD>Ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
delete[] data;
|
|
|
|
|
this->length += source.length;
|
|
|
|
|
this->data = new char[this->length];
|
|
|
|
|
|
|
|
|
|
strcpy(tmp, data);
|
|
|
|
|
strncat(data, source.data, source.length);
|
|
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString::CString(const CString &source) : CString(source.data, source.length) {}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶԱ<EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
bool CString::operator<(const CString &source) const {
|
|
|
|
|
// <EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>==<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|
|
|
|
if (source.length != length || data == nullptr) {
|
|
|
|
|
return false;
|
|
|
|
|
} else {
|
|
|
|
|
if (source.data == data) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱȽ<EFBFBD>
|
|
|
|
|
int compareLength = source.length < length ? source.length : length;
|
|
|
|
|
for (int i = 0; i < compareLength; ++i) {
|
|
|
|
|
if (data[i] < source.data[i]) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|