自学内容网 自学内容网

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)!