当前位置: 首页 > news >正文

c++作业

练习题:

#include <iostream>
#include <cstring>
using namespace std;

class mystring
{
	char* p;
	int len;
public:
	mystring();
	mystring(const char* p);
	~mystring();
	void copy(const mystring& str);
	void append(const mystring& str);
	void show();
	bool compare(const mystring& str);
	void swap(mystring& str);
};


mystring::mystring()
	:p(NULL),len(0)
{

}


mystring::mystring(const char* p)
{
	len = strlen(p);
	this->p = new char[len];
	strcpy(this->p,p);
}


mystring::~mystring()
{
	if(p != NULL)
	{
		delete[] p;
	}
}


void mystring::copy(const mystring& str)
{
	if(p != NULL)
	{
		delete[] p;
	}
	len = strlen(str.p);
	p = new char[len];
	strcpy(p,str.p);
}


void mystring::append(const mystring& str)
{
	len = len + str.len;
	char* temp = p;
	p = new char[len];
	strcpy(p,temp);
	strcat(p,str.p);
	delete[] temp;
}


void mystring::show()
{
	cout<< p << endl;
}


bool mystring::compare(const mystring& str)
{
	return strcmp(p,str.p) == 0;
}


void mystring::swap(mystring& str)
{
	char* temp = p;
	p = str.p;
	str.p = temp;
}


int main()
{
	mystring str = "hello";
	mystring ptr;
	ptr.copy(str);
	ptr.show();
	ptr.append(str);
	ptr.show();
	if(ptr.compare(str) == true)
	{
		cout <<"一样"<<endl;
	}
	else
	{
		cout <<"不一样"<<endl;
	}
	ptr.swap(str);
	ptr.show();
	str.show();
	return 0;
}

第一题

#include <iostream>
#include <cstring>
using namespace std;
class myFile
{
private:
	FILE* fp;
public:
	myFile(const char* file);
	~myFile();

	void mywrite(string str);
	string myread(int size);
};


myFile::myFile(const char* file)
{
	//fp = fopen(file,"a+");
	fp = fopen(file,"w+");
	if(fp == NULL)
	{
		cout << "文件不存在" <<endl;
		return;
	}
}


myFile::~myFile()
{
	fclose(fp);
}


void myFile::mywrite(const string str)
{
	const char* p = str.data();
	printf("%s\n",p);
	if(fwrite(p,strlen(p),1,fp)==0)
	{
		cout << "写入失败" << endl;
	}
}


string myFile::myread(int size)
{
	char buf[size+1] = "";
	fseek(fp,0,SEEK_SET);
	if(fread(buf,size,1,fp) == 0)
	{
		cout << "读取失败"<<endl;
	}
//	printf("%s\n",buf);
	string p = buf;
	return p; 
}


int main()
{
	myFile txt = "./File.txt";
	txt.mywrite("1234567123455");
	string buf = txt.myread(10);
	cout << buf <<endl;
	return 0;
}

第二题

#include <iostream>
#include <pthread.h>
#include <unistd.h>
using namespace std;

enum kinds_mutex
{
	MUTEX_FAST,
	MUTEX_CHECK,
	MUTEX_RECURSION
};

class Mutex
{
	private:
		pthread_mutex_t mu;
		enum kinds_mutex kinds;
	public:
		Mutex();
		void setMutex(enum kinds_mutex kinds);
		~Mutex();
		void lock();
		void unlock();
};


Mutex::Mutex()
{
	pthread_mutex_init(&mu,NULL);
}


void Mutex::setMutex(enum kinds_mutex kinds)
{
	switch(kinds)
	{
		case MUTEX_FAST:
			{
				pthread_mutex_init(&mu,NULL);
				break;
			}
		case MUTEX_CHECK:
			{
				pthread_mutexattr_t attr;
				pthread_mutexattr_init(&attr);
				pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_ERRORCHECK_NP);
				pthread_mutex_init(&mu,&attr);
				break;
			}
		case MUTEX_RECURSION:
			{
				pthread_mutexattr_t attr;
				pthread_mutexattr_init(&attr);
				pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE_NP);
				pthread_mutex_init(&mu,&attr);
				break;
			}

	}
}


Mutex::~Mutex()
{
	pthread_mutex_destroy(&mu);
}


void Mutex::lock()
{
	pthread_mutex_lock(&mu);
}


void Mutex::unlock()
{
	pthread_mutex_unlock(&mu);
}


Mutex m1,m2;


void* pthread_main(void* arg)
{
	while(1)
	{
		m2.lock();
		cout << "线程2"<<endl;
		sleep(1);
		m1.unlock();
	}
}


int main()
{
	pthread_t id;
	m1.setMutex(MUTEX_FAST);
	m2.setMutex(MUTEX_FAST);
	m2.lock();
	pthread_create(&id,0,pthread_main,NULL);
	pthread_detach(id);
	while(1)
	{
		m1.lock();
		cout<<"线程1"<<endl;
		sleep(1);
		m2.unlock();
	}

	return 0;
}

相关文章:

  • 数据结构-----双向链表
  • Java 大视界 -- 企业数字化转型中的 Java 大数据战略与实践(93)
  • 普通人如何主动适应AI浪潮
  • Dify +deepseek-free-api 实现API对话
  • 机器学习·数据处理
  • 你知道数字电路中的运算器不?
  • 内存泄漏是什么?
  • 【Web前端开发精品课 HTML CSS JavaScript基础教程】第二十五章课后题答案
  • 华为动态路由-OSPF-骨干区
  • 有没有其他技术可以替代本地 RAG?
  • 基于ffmpeg+openGL ES实现的视频编辑工具-环境搭建(三)
  • 负载均衡集群( LVS 相关原理与集群构建 )
  • 无人机热成像与AI跟踪技术:全天候智能应用的未来!
  • 【无标题】基于Unity写一个DelayInvoke方法
  • Vue 3:基于按钮切换动态图片展示(附Demo)
  • 让大模型帮我设计crnn网络及可运行demo,gpt4o豆包qwendeepseek-r1
  • 用idea创建vue3项目过程中遇到的问题
  • 机器学习-生命周期
  • 为什么外贸办公需要跨境专线网络?
  • AF3​​​​​​​ Msa、TemplateHit、HitMetadata类解读
  • 哥伦比亚总统称将在访华期间签署“一带一路”倡议意向书,外交部回应
  • 外交部回应西班牙未来外交战略:愿与之一道继续深化开放合作
  • 马斯克的胜利?OpenAI迫于压力放弃营利性转型计划
  • 言短意长|党政主官如何塑造流量城市?
  • 躺着玩手机真有意思,我“瞎”之前最喜欢了
  • 新闻1+1丨多地政府食堂开放 “舌尖上的服务”,反映出怎样的理念转变?