У меня проблема с упражнениями. Я должен написать функцию, которая возвращает всех президентов с кратчайшим сроком полномочий. В моем файле "presidents.txt" я вижу, что есть 3 президента, которые правили только один год. Я могу написать забаву, которая возвращает только одного президента, поэтому я пытаюсь использовать связанный список, чтобы вернуть еще несколько. К сожалению, когда я пытаюсь скомпилировать свой код, я вижу ошибку «получение адреса временного [-fpermissive]».
lista_2 = &shortest_time(lista);
Специально для этой строки. Извините за мой Engli sh и другие ошибки. Я знаю, что все это, вероятно, беспорядок.
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
struct node
{
string name;
string surname;
int start_date;
int end_date;
string faction;
node *next;
};
void add_back(node *&head, string n,
string sn, int st,
int en, string fa)
{
node *pom = head;
node *tmp = new node;
tmp->name = n;
tmp->surname = sn;
tmp->start_date = st;
tmp->end_date = en;
tmp->faction = fa;
tmp->next = NULL;
if (head)
{
while (pom->next != NULL)
{
pom = pom->next;
}
pom->next = tmp;
}
else
{
head = tmp;
}
}
void show(node *&head)
{
node *tmp = head;
while (tmp)
{
cout << tmp->name << endl;
cout << tmp->surname << endl;
cout << tmp->start_date << endl;
cout << tmp->end_date << endl;
cout << tmp->faction << endl;
cout << endl;
tmp = tmp->next;
}
}
struct linked
{
string surn;
linked *next;
};
void add_linked_first(linked *&head, string n)
{
linked *pom = head;
linked *tmp = new linked;
tmp->surn = n;
tmp->next = head;
head = tmp;
}
void show_linked(linked *&head)
{
linked *tmp = head;
while (tmp)
{
cout << tmp->surn << endl;
cout << endl;
tmp = tmp->next;
}
}
linked shortest_time(node *&head)
{
linked *list_1 = new linked;
list_1 = NULL;
string n;
node *tmp = head;
int mini = INT_MAX;
while(tmp)
{
if((tmp->end_date - tmp->start_date) < mini)
{
mini = (tmp->end_date - tmp->start_date);
// nick = tmp->name + " " + tmp->surname;
n = tmp->surname;
add_linked_first(list_1,n);
}
tmp = tmp->next;
}
return *list_1;
}
int main()
{
node *lista = new node;
lista = NULL;
string buffer;
fstream file("presidents.txt", std::ios::in);
while(!file.eof())
{
string name;
string surname;
int start_date;
int end_date;
string faction;
for (int i = 0; i <= 4; i++)
{
file >> buffer;
if (i == 2)
if (isdigit(buffer[0]))
i++;
switch (i)
{
case 0:
name = buffer;
break;
case 1:
surname = buffer;
break;
case 2:
surname += " " + buffer;
break;
case 3:
{
string st = buffer.substr(0,4);
string en = buffer.substr(5,4);
start_date = stoi(st);
end_date = stoi(en);
break;
}
case 4:
faction = buffer;
break;
}
}
add_back(lista, name, surname, start_date, end_date, faction);
}
linked *lista_2 = &shortest_time(lista);
cout << lista_2->surn;
return 0;
}