我无法将元素添加到我的链接列表中。我已经能够在main()中正确地扫描char字符串,并将其复制到temp节点,但是这不会被添加到链表中。
struct node{
char string[MAX_STRING_LENGTH];
node *next;
};
void insertAsFirstElement(node *head, node *last, char string[MAX_STRING_LENGTH])
{
//create temporary node
node *temp = new node;
printf("The temp's string before copy is %s.\n", temp->string);
//this is the string copy from the user to the temp
strcpy(temp->string, string);
printf("The temp's string is %s.\n", temp->string);
//set the next pointer to NULL (points to nothing)
temp->next = NULL;
//set first value in list to temp
head = temp;
//set last value to temp
last = temp;
}
答案 0 :(得分:1)
//this is the string copy from temp to new
char *strcpy(char *temp, const char string);
此声明 strcpy
函数。你想打电话。
strcpy(temp->string, string);
请不要混用C和C ++。它们是非常不同的语言。如果你想在C ++中这样做,那就太容易了。
#include <string>
#include <list>
int main() {
std::list<std::string> strings;
char choice = menu();
while (choice != '4') {
switch (choice) {
case '1':
std::string input;
std::cout << "Please enter a string: ";
std::cin >> input;
strings.push_back(input);
break;
case '2':
strings.pop_front();
break;
case '3':
if (strings.size() == 0) {
std::cout << "The list is empty.\n";
} else {
for (auto &s : strings) {
std::cout << s << "\n";
}
}
break;
default:
std::cout << "System Exit";
return 0;
}
}
}
答案 1 :(得分:0)
您发布的代码存在一些问题。
第一个是你的链表不包含字符串,它包含一个指针数组。
您应该省略*
char *string[MAX_STRING_LENGTH];
第二个是您致电scanf
。
scanf("%s\n", &string[MAX_STRING_LENGTH]);
这会将程序用户的输入放入字符串后面的内存中。 这不是你想要的。您希望用户的输入进入字符串开头的内存,如下所示:
scanf("%s\n", &string[0]);
或写得更简单:
scanf("%s\n", string);
最后,您并未将字符串复制到链接列表。
您可以使用strcpy
执行此操作,如下所示:
strcpy(temp->string, string);