У меня возникли проблемы с синтаксисом с помощью программы с двойным соединением, которую я пишу для образовательных целей. Я создал структуру в моем файле заголовка, и моя основная программа, похоже, в порядке, но реализация моих функций в файле .cpp дает мне огромные трудности. У меня возникли проблемы с рассмотрением трех случаев включения записи в список. В частности, распределение памяти, инициализация заголовка и хвоста списка, а также порядок инструкций меня смущает, поскольку передается копия записи, которая будет добавлена в мой список.Внедрение с двойным связыванием
Мой заголовок файла выглядит следующим образом:
struct rec
{
char * id;
char firstname[15];
char lastname[15];
struct rec* prev;
struct rec* next;
};
int AddItem (rec r);
int DeleteItem (char* delid);
void PrintList (int order);
Мой .cpp файл, где трудность заключается, заключается в следующем:
#include <iostream>
#include "list.h"
#include <string.h>
using namespace std;
// These pointers refer to the head and tail of the list.
rec* first = NULL;
rec* last = NULL;
int AddItem(Rec r)
{
rec* newRecEntry;
rec* current = NULL;
rec* previous = NULL;
// Check for duplicate id
current = first;
while (current)
{
if(strcmp(current -> id, r.id) == 0)
{
return 0;
}
else
// Create a new node
{
newRecEntry = new Rec;
newRecEntry->id = new char[strlen(r.id)+1];
strcpy(newRecEntry->id, r.id);
strcpy(newRecEntry->firstname,r.firstname);
strcpy(newRecEntry->lastname,r.lastname);
newRecEntry->next = NULL;
newRecEntry->prev = NULL;
}
// Find the appropriate position for the node and insert accordingly
// Check to see if the list is empty
if (first == NULL)
{
first = newRecEntry;
last = newRecEntry;
}
else if (r.lastname>last.lastname)
{
else
{
return 0;
}
/*int DeleteItem(char* ID)
Я должен иметь возможность вставить в начало, середину и конец списка. Удалите элемент из списка на основе идентификатора и распечатайте список в порядке возрастания или убывания на основе ввода пользователем, но сначала я просто хотел бы обработать добавление элементов в указанный список. Мои определения функции заключаются в следующем, а также содержит некоторые ошибки
lists.cpp
#include <iostream>
#include "list.h"
#include <string.h>
using namespace std;
// These pointers refer to the head and tail of the list.
rec* first = NULL;
rec* last = NULL;
int AddItem(Rec r)
{
rec* newRecEntry;
rec* current = NULL;
rec* previous = NULL;
// Check for duplicate id
current = first;
while (current)
{
if(strcmp(current -> id, r.id) == 0)
{
return 0;
}
else
// Create a new node
{
newRecEntry = new Rec;
newRecEntry->id = new char[strlen(r.id)+1];
strcpy(newRecEntry->id, r.id);
strcpy(newRecEntry->firstname,r.firstname);
strcpy(newRecEntry->lastname,r.lastname);
newRecEntry->next = NULL;
newRecEntry->prev = NULL;
}
// Find the appropriate position for the node and insert accordingly
// Check to see if the list is empty
if (first == NULL)
{
first = newRecEntry;
last = newRecEntry;
}
else if (r.lastname>last.lastname)
{
else
{
return 0;
}
/*int DeleteItem(char* ID)
{
rec
}
*/
/*void printList(int order)
{
loop
{
cout << ptr -> Id << " ";
cout << ptr -> firstname << " ";
cout << ptr -> lastname << " ";
cout << ptr -> prev << " "; // address of previous
cout << ptr << " "; // address of item
cout << ptr -> next << " "; // address of next item
}
}
Main выглядит следующим образом:
#include <iostream>
#include "list.h"
#include <string.h> // <string>
using namespace std;
void main (void)
{
int choice, printorder;
char idbuffer[100];
rec r;
do
{
cout << "Enter your choice 1 Add, 2 Delete, 3 Print, 0 quit "<<endl;
cin >> choice;
switch (choice)
{
case 1: //AddItem
cout << "\nEnter ID ";
cin >> idbuffer;
r.id = idbuffer;
cout << "\nFirst Name ";
cin >> r.firstname;
cout << "\nLast Name ";
cin >> r.lastname;
if (AddItem (r))
{
cout << "\nSuccess!\n";
}
else
{
cout << "\nItem failed to be added\n";
}
break;
case 2: //Delete
cout << "\nEnter id :";
cin >> idbuffer;
if (DeleteItem (idbuffer))
{
cout << "\nDelete OK\n";
}
else
{
cout << "\nDelete Failed for " << idbuffer;
}
break;
case 3: // Print
cout << "Enter order 0 - Ascending, 1 - Descending\n";
cin >> printorder;
PrintList (printorder);
break;
case 0: // quit
break;
default: // bad choice
break;
} // end switch
}
while (choice != 0);// end do while
} // end main
Y U использовать 'strcpy'? :( –
Это код C с некоторым 'cout', а не C++. Если вы хотите использовать C++, вы должны использовать' std :: string' вместо 'char []'. – us2012
@ us2012 Мне нужно использовать микс кода для образовательных целей.Я знаю, что это C и потенциально сложнее, но у меня нет другого выбора. –