简单用c++的类实现的string

cpp 复制代码
#include <iostream>
#include <string.h>
#include <string>
using namespace std;
class mystring
{
private:
    char* _str;
    unsigned int length;
public:
    mystring(const char * str);
    mystring(string&);
    void show();
    void copy(const  char * str);
    void copy(mystring&);
    void copy(string&);
    void append(const  char * str);
    void append(mystring&);
    void append(string&);
    bool compare(const  char * str);
    bool compare(mystring&);
    bool compare(string&);
    ~mystring();
};

mystring::mystring(const  char * str)
{
    this->length = strlen(str);
    this->_str = (char*) malloc(length);
    memcpy(this->_str,str,this->length);
}
mystring::mystring(string& str)
{
    mystring(str.data());
}
mystring::~mystring()
{
    cout<<"析构被调用"<<endl;
    free(this->_str);
}
void mystring::copy(const  char* str){
    
    free(this->_str);
    this->_str = 0;
    this->length =0;
    if (str == 0)
    {
        return;
    }
    this->length = strlen(str);
    this->_str = (char*) malloc(this->length);
    memcpy(this->_str,str,this->length);
}
void mystring::copy(mystring &str){
    this->copy(str._str);
}
void mystring::copy(string& str){
    this->copy(str.data());
}
void mystring::append(const  char * str){
    unsigned int otherstrLen = strlen(str);
    char* newstr = (char* ) malloc(this->length+otherstrLen);
    memcpy(newstr,this->_str,this->length);
    memcpy(newstr+this->length,str,otherstrLen);
    free(this->_str);
    this->_str=newstr;
}
void mystring::append(mystring& str){
    this->append(str._str);
}
void mystring::append(string& str){
    this->append(str.data());
}
bool mystring::compare(const  char* str){
    if (strcmp(str,this->_str))
    {
        return 0;
    }
    return 1;
}
bool mystring::compare(mystring& str){
    return this->compare(str._str);
}
bool mystring::compare(string& str){
    return this->compare(str.data());
}
void mystring::show(){
    cout<<this->_str<<endl;
}
int main(int argc, char const *argv[])
{
    mystring str = "hello";
    mystring ptr = "world";
    str.show(); ;
    str.copy("world");
    str.copy(ptr);
    str.append("world");
    str.append(ptr);
    str.compare("world");
    str.compare(ptr)   ;
    return 0;
}
cpp 复制代码
#include <iostream>
#include <cstdio>
#include <string.h>
using std::string;
using std::cout;
class File
{
private:
    FILE * file;
public:
    File(const char * filename,const char * mode);
    ~File();
    int write(string&);
    string read(unsigned int);

};

File::File(const char * filename,const char * mode)
{
    this->file=fopen(filename,mode);
    
}

File::~File()
{
    fclose(this->file);
}
int File::write(string& cont){
    return fwrite(cont.data(),cont.length(),1,file);
}
string File::read (unsigned int length){
    char * buf = (char*) malloc (length);
    fread(buf,length,1,file);
    string ret = buf;
    free (buf);
    return ret;
}
int main(int argc, char const *argv[])
{
    File file("1.txt","w") ;//以写的形式打开1.txt文件
    string str = "hello";
    file.write(str) ;//将 str 里面的内容,即"hello" 写入文件 1.txt 中
    string ptr = file.read(50) ;//从 1.txt 中读取最多 50个字节的数据,并且写入ptr中
    
    return 0;
}
相关推荐
handler019 小时前
【Linux】线程与虚拟内存的底层世界
linux·运维·服务器·c++·线程·虚拟地址空间·共享内存
Flynt9 小时前
把公司项目迁到 Spring Boot 4.0:编译通过只是开始
java·spring boot·后端
郝学胜-神的一滴9 小时前
C++11 工程级应用 09:告别无谓拷贝,解锁高性能移动语义
开发语言·数据结构·c++·vscode·软件工程·visual studio
Tangyuewei9 小时前
给老 Spring 项目装个 AI Agent
java·人工智能·spring
她的男孩10 小时前
多租户和数据权限怎么共存?扒完拦截器注册链路,我找到 4 个隐蔽的坑
java·后端·架构
MC皮蛋侠客10 小时前
OPC UA 系列(一):标准全景与 Python 最小闭环——让第一条设备数据流动起来
开发语言·python·opcua
小溪学编程10 小时前
Java BufferedReader 详解:从基础用法到性能优化
java·python·性能优化
HZero.chen10 小时前
Java 匿名类简介
java·匿名类
用户31268748772010 小时前
Java 泛型擦除到底擦掉了什么?类型安全与桥接方法深度拆解
java
SamChan9010 小时前
PDF翻译后的格式完整性校验:用Python自动比对译文与原文档的表格与段落结构
开发语言·python·ai·pdf·机器翻译