gpt4 book ai didi

c++ - 获取线路如何工作?

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:31 26 4
gpt4 key购买 nike

我正在尝试编写自己的 getline 函数,但它一直出现段错误。如果我的无法正常工作,我该如何修复它以及 get line 如何正式工作?我写这篇文章是为了学习如何更好地编码。

#include"MyString.h"





MyString::MyString( ) //constructor
{
size=0;
capacity=1;
data=new char[capacity];

}
MyString::MyString(char * n) //copy constructor
{
size=strlen(n);
capacity=strlen(n)+1;
data=new char[capacity];
strcpy(data,n);
}
MyString::MyString(const MyString &right) //
{
size=strlen(right.data);
capacity=strlen(right.data)+1;
data=new char [capacity];
strcpy(data,right.data);

}
MyString::~MyString( )
{
delete [] data;
}
MyString MyString::operator = (const MyString& s)
{

if(this!=&s)
{
MyString temp=data;
delete [] data;
size=strlen(s.data);
capacity=size+1;
data= new char [capacity];
strcpy(data,s.data);
}
}
MyString& MyString::append(const MyString& s)
{
if(this!=&s)
{
strcat(data,s.data);
}


}
MyString& MyString::erase()
{

}
MyString MyString::operator + (const MyString& s)const
{
return strcat(data,s.data);
}
bool MyString::operator == (const MyString& s)
{
return strcmp(data,s.data)==0;
}
bool MyString::operator < (const MyString& s)
{
return strcmp(data,s.data)<0;
}
bool MyString::operator > (const MyString& s)
{
return strcmp(data,s.data)>0;
}
bool MyString::operator <= (const MyString& s)
{
return strcmp(data,s.data)<=0;
}
bool MyString::operator >= (const MyString& s)
{
return strcmp(data,s.data)>=0;
}
bool MyString::operator != (const MyString& s)
{
return strcmp(data,s.data)!=0;
}
void MyString::operator += (const MyString& s)
{
append(s.data);
}
char& MyString::operator [ ] (int n)
{
return data[n];
}
void MyString::getline(istream& in)
{
char c;
erase();
ifstream input;
while(in.get(c)&&c!='\n')
{
data[size]=c;
size++;

if(size+1<=capacity)
{
capacity*=2;
char*p=new char[capacity];
strcpy(p,data);
delete [] data;
data=p;
}
data[size]=c;
size++;
data[size]='\0';
}

}
int MyString::length( ) const
{
return strlen(data);
}
void MyString::grow()
{
capacity=strlen(data)+1;
MyString temp;
temp=data;
delete [] data;
capacity*=2;
data= new char[capacity];
}

ostream& operator<<(ostream& out, MyString& s)
{

out<<s.data;
return out;


}



// int MyString::getCapacity(){return capacity;}

最佳答案

嗯...

if(size+1<=capacity)

假设您的容量为 11,尺寸为 11。

if( 12 <= 11 )
{
// Resize capacity. This code won't run.
}

你想要 if( size >= capacity )

此外,您有 data[size] = c; size++; 在你的循环中两次。所以你要为每个角色制作 2 个拷贝。

关于c++ - 获取线路如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com