/* 题目:定义一个字符串类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++; } } }