#include //编译预处理命令 #include #include 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() { s1 = new char[1]; s1[0] = '\0'; s2 = new char[1]; s2[0] = '\0'; } STR::STR(char *str) { s1 = new char[strlen(str) + 1]; strcpy(s1, str); s2 = new char[strlen(str) + 1]; strcpy(s2, str); } void STR:: set(char *str) { delete[] s1; s1 = new char[strlen(str) + 1]; strcpy(s1, str); } void STR::delsame() { int len = strlen(s1); if (len == 0) return; int k = 0; s2[k++] = s1[0]; for (int i = 1; i < len; ++i) { bool isDuplicate = false; for (int j = 0; j < k; ++j) { if (s1[i] == s2[j]) { isDuplicate = true; break; } } if (!isDuplicate) { s2[k++] = s1[i]; } } s2[k] = '\0'; } void STR:: show() { std::cout << "原串:s1=" << s1 << std::endl; std::cout << "新串:s2=" << s2 << std::endl; } STR:: ~STR() { delete[] s1; delete[] s2; } //主函数测试 int main() { STR test; char str[100]; std::cout << "输入字符串:"; std::cout << "\n"; std::cin.getline(str, 100); test.set(str); test.delsame(); test.show(); return 0;}