Question: scoreboard.cpp: void insert _ sorted ( Node * & head, const Climber& climber ) { Node * new _ node = new Node { climber

scoreboard.cpp:
void insert_sorted(Node*& head, const Climber& climber){
Node* new_node = new Node{climber, nullptr};
if (!head || climber.score > head->climber.score){
new_node->next = head;
head = new_node;
return;
}
Node* current = head;
while (current->next && current->next->climber.score > climber.score){
current = current->next;
}
new_node->next = current->next;
current->next = new_node;
}
Node* find(Node* head, const char* name){
while (head){
if (strcmp(head->climber.name, name)==0){
return head; // Return Node*(the node itself, not just the climber)
}
head = head->next;
}
return nullptr;
}
void clear(Node*& head){
while (head){
Node* temp = head;
head = head->next;
delete temp;
}
}
void write(std::ostream& out, Node* head){
out std::left std::setw(8) "Rank"
std::setw(20) "Name"
std::setw(8) "Country"
"Score
";
int rank =1;
while (head){
out std::left std::setw(8) rank++;
write(out, head->climber);
out '
';
head = head->next;
}
}
scoreboard.h:
struct Node {
Climber climber;
Node *next;
};
void insert_sorted(Node*& head, const Climber& climber);
Node* find(Node* head, const char* name);
void clear(Node*& head);
void write(Node* head, std::ostream& out);
#endif // SCOREBOARD_H
main.cpp:
Node* build_scoreboard(const char* filename){
std::ifstream file(filename);
if (!file.is_open()){
std::cerr "Error: Could not open file " filename '
';
return nullptr;
}
Node* list = nullptr;
Climber climber;
while (read(file, climber)){
insert_sorted(list, climber);
}
return list;
}
int main(int argc, char* argv[]){
if (argc 2|| argc >3){
std::cerr "Usage: " argv[0]"[lead_file]
";
return 1;
}
Node* bouldering_list = build_scoreboard(argv[1]);
if (!bouldering_list) return 1;
std::cout (strstr(argv[1], "bouldering")? "Bouldering results:
" : "Lead results:
");
write(bouldering_list, std::cout);
Node* lead_list = nullptr;
if (argc ==3){
lead_list = build_scoreboard(argv[2]);
if (!lead_list){
clear(bouldering_list);
return 1;
}
std::cout '
'(strstr(argv[2], "lead")? "Lead results:
" : "Bouldering results:
");
write(lead_list, std::cout);
Node* combined_list = nullptr;
Node* current = bouldering_list;
while (current != nullptr){
insert_sorted(combined_list, current->climber);
current = current->next;
}
current = lead_list;
while (current != nullptr){
Node* found = find(combined_list, current->climber.name); by name
if (found){
found->climber.score += current->climber.score;
} else {
insert_sorted(combined_list, current->climber);
}
current = current->next;
}
std::cout "
Combined results:
";
write(combined_list, std::cout);
clear(combined_list);
}
clear(bouldering_list);
clear(lead_list);
return 0;
}
climber.h:
const int NAME_SIZE =64;
const int COUNTRY_SIZE =4;
struct Climber {
char name[NAME_SIZE];
char country[COUNTRY_SIZE];
double score;
};
std::istream& read(std::istream& in, Climber& climber);
void write(std::ostream& out, const Climber& climber);
#endif //CLIMBER_H
climber.cpp:
std::istream& read(std::istream& in, Climber& climber){
std::string line;
if (!std::getline(in, line)) return in;
std::stringstream ss(line);
std::string country, name, score;
if (std::getline(ss, country, ',') && std::getline(ss, name, ',') && std::g\
etline(ss, score)){
std::strncpy(climber.country, country.c_str(),4);
std::strncpy(climber.name, name.c_str(),64);
climber.score = std::stod(score);
} else {
in.setstate(std::ios::failbit);
}
return in;
}
void write(std::ostream& out, const Climber& climber){
out std::left std::setw(20) climber.name
std::setw(8) climber.country
std::fixed std::setprecision(1) climber.score;
}
EDIT CODE TO COMPILE AND RUN LIKE PICTURE
Two files
When the program is run with both the bouldering and lead datafiles, it should display the following:
scoreboard.cpp: void insert _ sorted ( Node * &

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!