面向对象程序题(4)

/*
题目:定义一个字符串类string,具体要求如下:
(1)私有成员数据:
char * str1 ,* str2 ,* str,其中str = str1 + str2
(2)公共成员函数:
构造函数:初始化str1和str2
void del():删除str中的空格字符
void sort():对str中的字符按升序进行排序
void show():输出所有成员数据
(3)设计一个完整的程序对该类进行测试
分别以字符串 “dax e” 和 “5 8”对str1和str2初始化
输出删除空格和排序前的字符串str1,str2,str
输出删除空格和排序后的字符串str1,str2和str
*/
#include<iostream>
using namespace std;
#include<string>
//创建string类
class String
{
private:
    char * str, * str1, * str2;
public:
    String(char* ptr1, char* ptr2);
    void del();
    void sort();
    ~String()
    {
        delete str;
        delete str1;
        delete str2;
    }
};
String::String(char* ptr1, char* ptr2)
{
    //this->str1 = ptr1;
    //this->str2 = ptr2;  //这么写会导致内存多次释放。应该开辟新的空间。
    this->str1 = new char[strlen(ptr1) + 1];//在堆区分配内存给str1
    this->str2 = new char[strlen(ptr2) + 1];
    this->str = new char[strlen(ptr1) + strlen(ptr2) + 1];
    //将字符内容复制到新开辟的空间中,利用strcpy函数
    strcpy(str1, ptr1);
    strcpy(str2, ptr2);
    //如何将两个字符串链接起来???使用strcat函数(字符串链接函数,将后面的连接到前面的末尾)
    strcpy(str, str1);
    strcat(str, str2);
    cout << "构造函数调用" << endl;
}
void String::del() //思路:遍历str(数组),值为‘ ’时,将当前值变为'\0'
{
    char* p1 = str;
    char* p2 = p1;
    while (*p1)
    {
        if (*p1 != ' ')
        {
            *p2++ = *p1;
            p1++;
        }

    }
}

 

上一篇:Java 处理字符串分割的相关方法(split)


下一篇:C语言学习笔记---字符串对比函数strspn()和strcspn()函数