我正在尝试创建一个包含指针的类,这是动态数组的核心。如何重载操作符>>所以我可以点击>>不知道要放多少个字符到指针上?I was trying:
#include <iostream>
class MyString
{
private:
char* str;
size_t length;
public:
//some code here
friend std::istream& operator>>(std::istream& is, const MyString& other)
{
is >> other.str;
return is;
}
}
,当我尝试输入一个字符串时发生了这种情况:检测到堆损坏
是否有一种方法可以读取字符串,将其分配给我的字符串,而不使用std::string头?(我试图做一个字符串类,不依赖于std::string)
一个简单的实现将使用is.get()
一次检索一个字符,并将其附加到other
,如果需要则调整大小。当然,当std::isspace(chr)
为真时停止。为此,您需要动态分配内存,并跟踪在MyString
的实现中正在使用/有多少可用空间。
这是它的骨架;你可能需要实现append()
方法。
friend std::istream& operator>>(std::istream& is, MyString& other) {
while (true) {
int chr = is.get();
if (is.eof() || std::isspace(chr)) {
break;
}
other.append((char)chr);
}
return is;
}
#include <iostream>
#include <string.h>
class MyString
{
private:
size_t length;
char* str;
void getInput(std::istream&is)
{
char c=' ';
while(c!='n')
{
is.get(c);
length++;
str=(char*)realloc(str, length);
if(c=='n')
{
str[length-1]=' ';
}
else{
str[length-1]=c;
}
}
}
public:
MyString()
{
length=0;
str=new char[1];
str[0]=' ';
}
//some code here
friend std::istream& operator>>(std::istream& is, MyString& other)
{
std::cout<<"Enter String: ";
other.getInput(is);
return is;
}
void printString()
{
std::cout<<str<<std::endl;
}
~MyString()
{
delete[]str;
length=0;
}
};
int main()
{
MyString s;
std::cin>>s;
s.printString();
}