用c++语言编程,要求:定义一个字符串类STR,从左到右对字符串中每个字符删除后所有相同的字符,只留下第一次出现的那一个。具体要求:1、私有数据成员:char*s1指向原字符串,存放字符串的空间需要动态分配.chars2:指向结果字符串,存放字符串的空间需要动态分配。2、公有成员函数:
时间: 2024-02-16 14:03:50 浏览: 72
以下是符合要求的 STR 类的实现:
```c++
#include <cstring>
#include <iostream>
class STR {
public:
STR(const char* s) {
size_t len = strlen(s);
s1 = new char[len + 1];
s2 = new char[len + 1];
strcpy(s1, s);
remove_duplicate_chars();
}
~STR() {
delete[] s1;
delete[] s2;
}
const char* get() const {
return s2;
}
private:
char* s1;
char* s2;
void remove_duplicate_chars() {
size_t len = strlen(s1);
s2[0] = s1[0];
size_t j = 1;
for (size_t i = 1; i < len; i++) {
if (s1[i] != s1[i - 1]) {
s2[j] = s1[i];
j++;
}
}
s2[j] = '\0';
}
};
int main() {
STR s("hello world");
std::cout << s.get() << std::endl;
return 0;
}
```
在构造函数中,先将原字符串 s1 复制到动态分配的空间中。接着遍历 s1,将不同的字符复制到 s2 中,这样 s2 中就只包含每个字符的第一次出现了。最后在 s2 的末尾添加一个空字符,以便将其视为 C 风格字符串。在析构函数中释放动态分配的空间。使用时,只需要调用构造函数,然后调用 get() 函数获取处理后的字符串即可。
阅读全文