在自定义的mystring类当中提取和插入运算符。 要求:通过动态分配内存,实现无限制长度字符串的输入(以回车符为终止标记)。 输入:任意长度的字符串,以回车符为终止标记,且回车符本身不存储。 输出: 输出该字符串本身。
时间: 2024-02-20 08:56:28 浏览: 15
好的,我理解了您的问题。以下是一个示例代码,实现了您的要求:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class mystring {
private:
char* str;
int len;
public:
mystring() {
str = nullptr;
len = 0;
}
friend istream& operator>>(istream& is, mystring& s) {
// 动态分配内存
char c;
int i = 0;
while (is.get(c)) {
if (c == '\n') {
break;
}
char* temp = new char[i + 1];
if (i > 0) {
strcpy(temp, s.str);
delete[] s.str;
}
temp[i] = c;
s.str = temp;
s.str[i + 1] = '\0';
i++;
}
s.len = i;
return is;
}
friend ostream& operator<<(ostream& os, const mystring& s) {
os << s.str;
return os;
}
};
int main() {
mystring s;
cin >> s;
cout << s << endl;
return 0;
}
```
在这个示例代码中,我们定义了一个名为 `mystring` 的类,其中包含一个字符指针 `str` 和一个整数 `len`,用于存储输入的字符串和字符串长度。我们还定义了 `>>` 和 `<<` 运算符,以便能够对 `mystring` 类对象进行输入和输出。
在 `>>` 运算符中,我们使用 `is.get(c)` 逐个读取字符,并检查是否到达了回车符。如果没有到达回车符,我们将字符存储到动态分配的内存中,并将 `str` 指向该内存。如果已经存储了一些字符,我们将使用 `strcpy` 将旧字符串复制到新字符串中,并释放旧内存。最后,我们将输入字符的数量存储到 `len` 中。
在 `<<` 运算符中,我们只需简单地输出 `str`。
最后,在 `main` 函数中,我们创建一个 `mystring` 类对象 `s`,并使用 `cin >> s` 输入字符串,然后使用 `cout << s` 输出该字符串。
希望这个示例代码能够帮助您理解如何实现自定义的 mystring 类。