DAY1 C++作业
作业:
使用结构体实现string的功能,(定义全局函数)实现返回值是首地址的功能,再来实现运算,"+、>、==",实现清空字符串的功能。
代码:
#include <iostream>
#include <cstring>
using namespace std;
typedef struct
{
string a;
string b;
}mystring;
const char* my_cstr(string str)
{
char *buff=(char *)malloc(str.length()+1);//获取数组大小
std::copy(str.begin(), str.end(), buff);//将字符串复制到buff数组
buff[str.length()] = '\0';//数组结尾加\0
return buff;
}
const char* my_plus(string str1,string str2)
{
char *buff=(char *)malloc(str1.length()+str2.length()+1);
std::copy(str1.begin(), str1.end(), buff);
std::copy(str2.begin(), str2.end(), &buff[str1.length()]);//复制+拼接
buff[str1.length()+str2.length()] = '\0';
return buff;
}
int my_bigger(string str1,string str2)
{
char *buff1=(char *)malloc(str1.length()+1);
char *buff2=(char *)malloc(str2.length()+1);
if (!buff1 || !buff2) {
// 处理内存分配失败的情况
free(buff1);
free(buff2);
return -1; // 或者其他错误代码
}
std::copy(str1.begin(), str1.end(), buff1);
std::copy(str2.begin(), str2.end(), buff2);
buff1[str1.length()] = '\0';
buff2[str2.length()] = '\0';
size_t min=str1.length()>=str2.length()?str2.length():str1.length();//取两个字符串长度较小的 str2小,min必定==str2.length()
for(int i=0;i<(int)min;i++)
{
if(buff1[i]>buff2[i])//比较str1大于str2成功
{
return 1;
}
else if(buff1[i]==buff2[i])
{
if(min==str2.length() && str1.length()!=str2.length()&&i==(int)min-1)//str1和str2长度不一样 并且str2长度小 并且当前循环是最后一次
{
return 1;
}
}
else
{
return 0;
}
}
return 0;//取短的长度比较完,还没返回1,那么str1>str2就不成立了
}
int my_equal(string str1,string str2)
{
char *buff1=(char *)malloc(str1.length()+1);
char *buff2=(char *)malloc(str2.length()+1);
if (!buff1 || !buff2) {
// 处理内存分配失败的情况
free(buff1);
free(buff2);
return -1; // 或者其他错误代码
}
std::copy(str1.begin(), str1.end(), buff1);
std::copy(str2.begin(), str2.end(), buff2);
buff1[str1.length()] = '\0';
buff2[str2.length()] = '\0';
int min=str1.length()>=str2.length()?str1.length():str2.length();//取两个字符串长度较小的
for(int i=0;i<min;i++)
{
if(buff1[i]==buff2[i])
{
if(i==min-1&&str1.length()==str2.length())
{
return 1;//比较str1等于str2成功
}
}
else
{
return 0;
}
}
return 0;
}
void my_clear(string *str)
{
*str="";
}
int main()
{
mystring s;
s.a="asdaaaaa";
s.b="asdaaa";
string newstring;
char ggg[20];
//strcpy(ggg,s.c_str())
strcpy(ggg,my_cstr(s.a));
cout << ggg << endl;
//s.a+s.b
newstring=my_plus(s.a,s.b);
cout << newstring << endl;
//s.a>s.b
cout << my_bigger(s.a,s.b) <<endl;
//s.a==s.b
cout << my_equal(s.a,s.b) <<endl;
//清空
my_clear(&s.a);
my_clear(&s.b);
cout << s.a <<endl;
cout << s.b <<endl;
cout << "结束" <<endl;
return 0;
}
运行测试结果:
Xmind知识点:
原文地址:https://blog.csdn.net/m0_69965956/article/details/144299976
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!