#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
using namespace std;
class mystring {
private:
char* buf;
int len;
public:
// 单参构造函数,支持隐式调用,列表初始化 len
mystring(const char* str)
: len(strlen(str))
{
buf = new char[len + 1];
strcpy(buf, str);
}
// copy 函数,从 mystring 对象拷贝
void copy(const mystring& other) {
len = other.len;
buf = new char[len + 1];
strcpy(buf, other.buf);
}
// copy 函数,从 C 风格字符串拷贝
void copy(const char* str) {
len = strlen(str);
buf = new char[len + 1];
strcpy(buf, str);
}
// append 函数,追加 mystring 对象内容
void append(const mystring& other) {
int newLen = len + other.len;
char* newBuf = new char[newLen + 1];
strcpy(newBuf, buf);
strcat(newBuf, other.buf);
buf = newBuf;
len = newLen;
}
// append 函数,追加 C 风格字符串内容
void append(const char* str) {
int strLen = strlen(str);
int newLen = len + strLen;
char* newBuf = new char[newLen + 1];
strcpy(newBuf, buf);
strcat(newBuf, str);
buf = newBuf;
len = newLen;
}
// compare 函数,比较 mystring 对象
int compare(const mystring& other) {
return strcmp(buf, other.buf);
}
// compare 函数,比较 C 风格字符串
int compare(const char* str) {
return strcmp(buf, str);
}
// show 函数,输出字符串
void show() {
cout << buf << endl;
}
// at 函数,获取指定位置字符
char at(int index) {
if (index >= 0 && index < len) {
return buf[index];
}
// 这里可根据需求处理越界,简单返回空字符或抛异常等,这里返回空字符示例
return '\0';
}
};
int main() {
mystring str = "hello";
mystring ptr = "world";
str.copy(ptr);
str.copy("你好");
str.append(ptr);
str.append("你好");
str.compare(ptr);
str.compare("你好");
str.show();
cout << str.at(0) << endl;
return 0;
}