第一题: 继续为 mystring类编写以下方法:
1:析构函数,释放buf指向的堆空间
2:编写 append(const mystring r) 为当前字符串尾部,拼接新的字符串r
3:编写 isEqual(const mystring r) 判断当前字符串和 字符串 r是否相等
#include <iostream>
#include <cstring>using namespace std;//访问私有成员,使用getter和settter函数进行访问
class mystring // 定义一个名为 mystring的类,用于模拟字符串处理
{
private:char* buf;
public:mystring(const char* str); //构造函数,接受一个const char* 类型的参数,用于初始化bufmystring();~mystring();//析构函数void show(); //输出的字符串void setbuf(const mystring res); //修改字符串的信息const char* getbuf()const; //获取字符串的信息void append(const mystring res); //拼接字符串int isequal(const mystring res); //比较字符串是否相等
};mystring ::~mystring()
{free(buf); //释放申请的堆空间printf("空间释放\n");
}void mystring::setbuf(const mystring res)
{free(this->buf);int len=strlen(res.buf);this->buf=(char*)calloc(1,len+1);strcpy(this->buf,res.buf); // 将传入的字符串复制到新分配的内存中}const char* mystring::getbuf()const{return buf;}mystring::mystring(){buf=(char*)calloc(1,1);}
mystring::mystring(const char* str)
{int len =strlen(str);buf=(char*)calloc(1,len+1);strcpy(buf,str);
}void mystring::show()
{cout << buf << endl;
}
void mystring::append(const mystring res)
{int len1 = strlen(buf);int len2 = strlen(res.buf);char* arr = (char*)calloc(1, len1 + len2 + 1);//申请一个新空间作为中间变量接收strcpy(arr, buf);strcat(arr, res.buf);free(buf);buf = arr;
}
int mystring::isequal(const mystring res)
{int rest=(strcmp(buf,res.buf)==0);if(rest==1){cout << "相等" << endl;}else{cout << "不相等" << endl;}return rest; //返回结果
}int main()
{mystring dest; //使用无参构造函数初始化,定义目标字符串mystring str="hello"; //使用带参构造函数定义源字符串,并初始化为 "hello"dest.setbuf(str); //将dest的内容修改成str的内容cout << "dest= " << dest.getbuf() << endl;dest.append(" world");// 将dest的内容追加到str后面cout << "dest= " << dest.getbuf() << endl;mystring str1="hello world";dest.isequal(str1); //判断str1与追加后的dest字符串是否相等mystring str2="helloworld 666";dest.isequal(str2);return 0;
}
效果展示:
第二题: 编写如下类: class File{ FILE* fp };
1:构造函数,打开一个指定的文件
2:write函数 向文件中写入数据
3:read函数,从文件中读取数据,以string类型返回
#include <iostream>
#include <string.h>using namespace std;class file{ // 定义一个名为File的类,用于文件的处理
private://string buf="hello world";FILE* fp;
public:file(){char arr[100]="hello world";fp=fopen("D:\\Users\\C++\\day2\\zy2\\1.txt","w");fwrite(arr,strlen(arr),1,fp);//写入文件fclose(fp);fp=fopen("D:\\Users\\C++\\day2\\zy2\\1.txt","r");char brr[100]=" ";fread(brr,sizeof(brr),strlen(brr),fp); //读取文件cout << "接收的文件数据数组:brr= " << brr << endl;}~file(){fclose(fp);}};int main()
{file str;return 0;
}