使用链表的字符串类
String class using linked list
我必须编写这个使用链表表示的String类。我的复制构造函数似乎有问题,我不知道如何编写赋值运算符。知道错误在哪里以及如何书写吗?所示的代码用于复制构造函数,具有以下操作String s="word"。我不知道如何为字符串s1=s2编写一个。这是我到目前为止的代码:
struct Element
{
char data;
Element* next;
};
class String
{
Element* top;
public:
String();
bool empty() const;
char last() const;
char pop();
void push(char);
friend std::ostream& operator<<(std::ostream&, const String&);
friend std::istream& operator>>(std::istream&, String&);
String(const char*);
};
String::String(const char *p)
{
int l = strlen(p);
for(int i=0; i < l+1 ; i++)
{
Element *newElement;
newElement = new Element;
newElement->data = p[i];
newElement->next = NULL;
if(top == NULL)
{
top = newElement;
}
else
{
Element *tmp = top;
while(tmp->next != NULL)
{
tmp = tmp->next;
tmp->next = newElement;
}
}
}
}
int main()
{
String s="Hello";
std::cout<<s;//operator<< works tested it
}
如果您定义了单链表,那么最好在列表的开头而不是尾部添加新元素。尽管如此,你的功能可能看起来像
字符串::字符串(const char*p({for(;*p;++p({Element*newElement=新元素;newElement->数据=*p;newElement->next=NULL;if(top==NULL({top=新元素;}其他的{元素*tmp=顶部;而(tmp->next!=NULL(temp=tmp->next;tmp->next=newElement;}}}
顺便说一下,它不是一个复制构造函数。至于复制构造函数,则可以将其定义为
String::String(const String&s(:top(NULL({if(s.top({top=新元素;top->data=s.top->data;top->next=NULL;for(元素*tmp1=top,tmp2=s.top;tmp2->next;tmp1=tmp1->next,tmp2=tmp2->next({tmp1->next=新元素;tmp1->next->data=tmp2->next->data;tmp1->next->next=NULL;}}}
在下面的代码中,while
循环将永远不会执行,因为top->next
将是NULL
。
Element *tmp = top;
while(tmp->next != NULL)
{
...
}
此外,正如@Claptrap所评论的,您在每个循环迭代中都分配了newElement
。
考虑到所有这些,我不明白为什么它会失败,但它可能在您尚未发布的代码中。请尽量将您的代码减少到再现问题所需的最低限度,然后将该代码包含在您的帖子中。
相关文章:
- C++ 创建包含链表和字符串的对象的链接列表时出错
- C++ - 链表字符串重复
- 字符串变成链表,然后检查括号余额
- 使用迭代从链表向后打印字符串
- 编译器如何将链表中的地址字符串在一起?
- 基于给定字符串数据类型的链表删除节点
- 有没有办法将最初作为字符串输入的数字字符数组复制到双向链表中
- C++ 使用链表的自定义字符串类中的重载 + 运算符
- 在链表末尾插入字符串
- 在 C++ 中使用链表按字母顺序对字符串进行排序
- 如何从链表中的字符串中获取第一个字母
- 如何获取链表中的所有"next"节点?构建调用字符串不起作用
- C++ - 链表插入排序(字符串元素)
- 如何让双向链表指向字符串
- 比较c++中链表中的两个字符串
- 如何根据字符串的首字母将其排序到链表中
- 如何打印由另一个字符串链表组成的链表
- 递归反转字符串链表
- 对链表中的字符串进行排序
- 对字符串链表中特定单词的出现次数进行计数.如何在log(n)时间内完成