有没有办法将最初作为字符串输入的数字字符数组复制到双向链表中



我想写一个使用双向链表的extremeFloat计算器

我已经创建了 DLL 并接受了用户的两个数字,因为字符串将其更改为字符数组,然后在将此字符复制到 DLL 时堆叠。

双向链表:

template <class T>
class DLList {
public:
DLList() {
front=rare=NULL;
}
~DLList();
int isEmpty();
int insertDigit(T data);
node<T> *getFront() {
return front;
}
int removeDigit(T data);
void empty();
private:
node<T> *front;
node<T> *rare;
};

插入代码:

template <class T>
int DLList<T>::insertDigit(T data)
{
node<T> *p;
p = new node<T>;
if(!p) return 0;
p->data = data;
p->next = p->prev = NULL;
if(front == NULL)
front = rare = p;
else {
p->prev = rare;
rare->next = p;
rare = p;
}
return 1;
}

主要功能:

int main()
{
int n, m;
DLList<char[]> d1;
cout<<"Enter a numbern";
string num = getExtreme();
cout<<"Enter another numbern";
string num2 = getExtreme();
n = num.length();
m = num2.length();
char numChar[n+1];
char numChar2[m+1];
strcpy(numChar, num.c_str());
for(int i=0;i<n;i++)
d1.insertDigit() = numChar[i];
return 0;
}

无法将字符数组复制到双向链表

首先,使用数组作为模板参数是非法的。从后续代码来看,您似乎正在尝试将单个字符复制到列表中,因此它应该是字符列表而不是字符数组的列表。

DLList<char> d1;

现在看看你的insertDigit函数。它接受一个参数,并且(出于某种原因)返回一个整数。所以这种语法d1.insertDigit() = numChar[i];没有意义。您尚未给出参数,并且正在尝试分配给返回的整数。

这就是你的做法

d1.insertDigit(numChar[i]);

另一个改进,numCharnumChar2完全没有必要,只需使用num并直接num2

for (int i=0; i < n; i++)
d1.insertDigit(num[i]);

对我来说,这段代码看起来像你从几乎正确的东西开始,但后来因为你不理解你的错误,你尝试了杂项更改,希望能解决问题,最终让你的代码变得更糟。这很少是继续的好方法,当您遇到错误时,请在进行任何更改之前尝试并理解它。即使您很幸运并修复了错误,您也不会明白为什么修复了它。这直接导致了货物崇拜编程

最新更新