定义一个字符串类STR,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个。例如,若字符串为"cocoon",删除重复出现的字符后,其结果是字符串"con"。
具体要求如下:
(1) 私有数据成员:
char *s1: 指向原字符串,存放字符串的空间需动态分配。
char *s2: 指向结果字符串,存放字符串的空间需动态分配。
(2) 公有成员函数
STR(); //构造函数 , 用形参str所指向的字符串初始化s1
STR(char *str); //构造函数 , 用形参str所指向的字符串初始化s1
void set(char *str); //用形参str所指向的字符串设置原串s1
void delsame(); //从s1中复制没有重复的字符到s2所指向的空间
void show(); //输出s1, s2所指向的字符数组空间的字符串的内容
~STR(); //析构函数, 释放s1, s2动态开辟的空间
(3) 在主函数中定义一个STR类的对象test, 键盘输入的字符串进行测试, 通过调用成员函数完成删除工作,输出删除前后的两个字符串。
【输入形式】键盘任意输入一字符串
【输出形式】输出删除前后的两个字符串。
【样例输入】
输入字符串:concoon
【样例输出】
原串:s1=concoon
新串:s2=con
二、代码实现
#include#include using namespace std; class STR{ //字符串类的定义 private: char *s1,*s2; //私有成员数据,s1为原串,s2为删除重复字符的新串 public: STR(); //构造函数 , 用形参str所指向的字符串初始化s1 STR(char *str); //构造函数 , 用形参str所指向的字符串初始化s1 void set(char *str); //用形参str所指向的字符串设置原串s1 void delsame(); //从s1中复制没有重复的字符到s2所指向的空间 void show(); //输出s1, s2所指向的字符数组空间的字符串的内容 ~STR(); //析构函数, 释放s1, s2动态开辟的空间 }; //字符串类的实现 STR::STR(char *str) { s1 = new char[strlen(str) + 1]; strcpy(s1, str); } void STR::set(char *str) {//没用上 s1 = new char[strlen(str) + 1]; strcpy(s1, str); } //核心代码 void STR::delsame() { int len = strlen(s1); s2 = new char[len]; int i = 0; int j = 0; s2[0] = ' ';//字符数组型字符串的终结符 while (s1[i] != ' ') { j = 0; while (s2[j] != ' ') { if (s1[i] != s2[j]) { j++; } else { break; } } if (s2[j] == ' ') { s2[j++] = s1[i]; s2[j] = ' '; } i++; } } void STR:: show() { cout << "原串:s1="; int len1=strlen(s1); for (int i = 0; i < len1; i++) { printf("%c", s1[i]); } cout << endl; cout << "新串:s2="; int len2=strlen(s2); for (int j = 0; j printf("%c", s2[j]); } } STR::~STR() { delete [] s1; delete [] s2; } int main() { char c[100]; cout << "输入字符串:"; cin >> c; cout<



