[期中][Deep copy && Shallow Copy] SongList
Problem Description
以下是一个简单的信息系统的例子。这个例子中缺少Cat类和CatFamily类(假设CatFamily中至多有100只猫)。
请阅读C++主程序,并了解类你需要实现一些什么。
EXAMPLE INPUT
2
CWIGAKZPB
4
4
3
PAUGOCDWM
4
1
XLAQWFT 10
2
ZINYSVEH
4
2
ZTYMHJGO
3
YITJLASK
4
2
CIXSDKMZ
4
2
XLAQWFT
2
KLPMURWX
4
2
USFTVBJMK
4
1
HAFGM 2
1
NVUIH 4
0
EXAMPLE OUTPUT
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
Fail to remove cat: CWIGAKZPB
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
We have these cats:
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
We have these cats:
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
No such cat: PAUGOCDWM
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
We have these cats:
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
Successfully added cat: XLAQWFT
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
Fail to remove cat: ZINYSVEH
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
We have these cats:
XLAQWFT of 10years old
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
Fail to remove cat: ZTYMHJGO
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
No such cat: YITJLASK
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
We have these cats:
XLAQWFT of 10years old
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
Fail to remove cat: CIXSDKMZ
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
We have these cats:
XLAQWFT of 10years old
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
Successfully removed cat: XLAQWFT
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
Fail to remove cat: KLPMURWX
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
We have these cats:
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
Fail to remove cat: USFTVBJMK
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
We have these cats:
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
Successfully added cat: HAFGM
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
Successfully added cat: NVUIH
1. Add a cat
2. Remove a cat
3. Find a cat
4. Print all cats
0. Exit this game
See you
主程序(C/C++)
#include <iostream>
#include <string>
using namespace std;
#include "source.cpp"
int main_menu() {
cout << "1. Add a cat" << endl;
cout << "2. Remove a cat" << endl;
cout << "3. Find a cat" << endl;
cout << "4. Print all cats" << endl;
cout << "0. Exit this game" << endl;
int choice;
cin >> choice;
return choice;
}
void add_a_cat(CatFamily & cat_family) {
string cat_name;
int cat_age;
cin >> cat_name >> cat_age;
if (cat_family.add_a_cat(cat_name, cat_age))
cout << "Successfully added cat: " << cat_name << endl;
else
cout << "Fail to add cat: " << cat_name << endl;
}
void remove_a_cat(CatFamily & cat_family) {
string cat_name;
cin >> cat_name;
if (cat_family.remove_a_cat(cat_name))
cout << "Successfully removed cat: " << cat_name << endl;
else
cout << "Fail to remove cat: " << cat_name << endl;
}
void find_a_cat(CatFamily & cat_family) {
string cat_name;
cin >> cat_name;
if (cat_family.has_cat(cat_name)) {
cout << "Here is your cat: "
<< cat_family.get_cat(cat_name).cat_name
<< " of " << cat_family.get_cat(cat_name).cat_age << "years old" << endl;
}
else
cout << "No such cat: " << cat_name << endl;
}
void print_all_cats(CatFamily & cat_family) {
cout << "We have these cats:" << endl;
for (int i = 0; i < cat_family.number_of_cats(); ++ i) {
string cat_name = cat_family[i];
cout << '\t' << cat_family.get_cat(cat_name).cat_name
<< " of " << cat_family.get_cat(cat_name).cat_age << "years old" << endl;
}
}
int main() {
CatFamily cat_family;
while (true) {
int choice = main_menu();
switch (choice) {
case 0: cout << "See you" << endl; exit(0);
case 1: add_a_cat(cat_family); break;
case 2: remove_a_cat(cat_family); break;
case 3: find_a_cat(cat_family); break;
case 4: print_all_cats(cat_family);
}
}
}
答案
#include<iostream>
#include<string>
using namespace std;
class Cat {
public:
string cat_name;
int cat_age;
};
class CatFamily
{
Cat cats[100];
int count;
int _index(const string & name) const {
for (int i = 0; i < count; ++ i)
if (cats[i].cat_name == name) return i;
return -1;
}
public:
CatFamily() {
count = 0;
}
int number_of_cats() const {
return count;
}
string operator[] (int num) const {
return cats[num].cat_name;
}
bool add_a_cat(const string & name, int age) {
int i = _index(name);
if (i != -1)
return false;
Cat cat;
cat.cat_name = name;
cat.cat_age = age;
cats[count] = cat;
++ count;
return true;
}
bool remove_a_cat(const string & name) {
int i = _index(name);
if (i == -1)
return false;
cats[i] = cats[count - 1];
-- count;
return true;
}
bool has_cat(const string & name) const {
int i = _index(name);
return (i != -1);
}
Cat get_cat(const string & name) const {
int i = _index(name);
return cats[i];
}
};
随机测试文本产生程序 (C)
#include "stdio.h"
int main() {
printf("2\n\
CWIGAKZPB\n\
4\n\
4\n\
3\n\
PAUGOCDWM\n\
4\n\
1\n\
XLAQWFT 10\n\
2\n\
ZINYSVEH\n\
4\n\
2\n\
ZTYMHJGO\n\
3\n\
YITJLASK\n\
4\n\
2\n\
CIXSDKMZ\n\
4\n\
2\n\
XLAQWFT\n\
2\n\
KLPMURWX\n\
4\n\
2\n\
USFTVBJMK\n\
4\n\
1\n\
HAFGM 2\n\
1\n\
NVUIH 4\n\
0");
}