gpt4 book ai didi

c++ - 如何比较两个不同类的对象?

转载 作者:行者123 更新时间:2023-11-28 07:08:30 24 4
gpt4 key购买 nike

我想编写一个程序,您可以在其中输入一些随机名称,然后在接下来的几行中输入father > son/daughter。然后程序将从第一个输入中搜索父亲。

例子:

mia ana
shane > ana

输出将是:

ana < shane

这是我制作的程序(注意 anak=child;ayah=father;nama=name):

using namespace std;

class status {
public:
string ayah, anak1, anak2, anak3;
status (const string& inayah="", const string& inanak1="", const string& inanak2="", const string& inanak3="") : ayah(inayah), anak1(inanak1), anak2(inanak2), anak3(anak3){}
};

class populasi {
string nama1, nama2, nama3, nama4, nama5, nama6;
public:
populasi (const string& innama1="",const string& innama2="",const string& innama3="", const string& innama4="",const string& innama5="",const string& innama6="")
: nama1(innama1), nama2(innama2), nama3(innama3), nama4(innama4), nama5(innama5), nama6(innama6){}



void cek(const status& x)
{
if( x.anak1() == nama1() ) cout << x.anak1() << " < " << x.ayah() << endl;
if( x.anak1() == nama2() ) cout << x.anak1() << " < " << x.ayah() << endl;
if( x.anak1() == nama3() ) cout << x.anak1() << " < " << x.ayah() << endl;
if( x.anak1() == nama4() ) cout << x.anak1() << " < " << x.ayah() << endl;
if( x.anak1() == nama5() ) cout << x.anak1() << " < " << x.ayah() << endl;
if( x.anak1() == nama6() ) cout << x.anak1() << " < " << x.ayah() << endl;

if( x.anak2 == nama1() ) cout << x.anak2() << " < " << x.ayah() << endl;
if( x.anak2 == nama2() ) cout << x.anak2() << " < " << x.ayah() << endl;
if( x.anak2 == nama3() ) cout << x.anak2() << " < " << x.ayah() << endl;
if( x.anak2 == nama4() ) cout << x.anak2() << " < " << x.ayah() << endl;
if( x.anak2 == nama5() ) cout << x.anak2() << " < " << x.ayah() << endl;
if( x.anak2 == nama6() ) cout << x.anak2() << " < " << x.ayah() << endl;

if( x.anak3 == nama1() ) cout << x.anak3() << " < " << x.ayah() << endl;
if( x.anak3 == nama2() ) cout << x.anak3() << " < " << x.ayah() << endl;
if( x.anak3 == nama3() ) cout << x.anak3() << " < " << x.ayah() << endl;
if( x.anak3 == nama4() ) cout << x.anak3() << " < " << x.ayah() << endl;
if( x.anak3 == nama5() ) cout << x.anak3() << " < " << x.ayah() << endl;
if( x.anak3 == nama6() ) cout << x.anak3() << " < " << x.ayah() << endl;
};
};

int main()
{
string nama1, nama2, nama3, nama4, nama5, nama6;
fscanf ( stdin, " %s %s %s %s %s %s", &nama1, &nama2, &nama3, &nama4, &nama5, &nama6);
populasi a (nama1, nama2, nama3, nama4, nama5, nama6);

string ayah, anak1, anak2, anak3;
fscanf ( stdin, " %s > %s %s %s", &ayah, &anak1, &anak2, &anak3);
status b ( ayah, anak1, anak2, anak3);

fscanf ( stdin, " %s > %s %s %s", &ayah, &anak1, &anak2, &anak3);
status c ( ayah, anak1, anak2, anak3);

fscanf ( stdin, " %s > %s %s %s", &ayah, &anak1, &anak2, &anak3);
status d ( ayah, anak1, anak2, anak3);

fscanf ( stdin, " %s > %s %s %s", &ayah, &anak1, &anak2, &anak3);
status e ( ayah, anak1, anak2, anak3);

fscanf ( stdin, " %s > %s %s %s", &ayah, &anak1, &anak2, &anak3);
status f ( ayah, anak1, anak2, anak3);

fscanf ( stdin, " %s > %s %s %s", &ayah, &anak1, &anak2, &anak3);
status g ( ayah, anak1, anak2, anak3);

a.cek(b);
a.cek(c);
a.cek(d);
a.cek(e);
a.cek(f);
a.cek(g);
return 0;
}

最佳答案

遗憾的是,您实际上是在以非常“C”的风格进行此操作,并且错过了 C++ 标准库用于解析输入、存储文本和关联容器(让您存储与“键”关联的值)的工具然后稍后通过指定相同的“ key ”找到它们。

鉴于每个人只有一种类型的数据与其相关联 - 他们的姓名 - 在此程序中不需要或受益于用户定义的类。 std::string 类可以轻松存储它们的名称。您的类存储了多个名称,但 C++ 标准库容器更能做到这一点。

#include <sstream>
#include <iostream>
#include <map>

int main()
{
std::string first_line;
if (!getline(std::cin, line))
{
std::cerr << "failed to read a line of names\n";
return 1;
}

// read and remember father/child relationships...
typedef std::map<std::string, std::string> Map;
Map child_to_father;
std::string father, child;
char c = '>';
while (iss >> father >> c && c == '>' && iss >> child)
child_to_father[child] = father;
if (!is.eof() || is.bad() || c != '>')
{
std::cerr << "error reading 'father > child' line\n";
return 1;
}

// now report the matches for names on the first line...
std::istringstream iss(first_line);
while (iss >> child)
{
Map::const_iterator i = child_to_father.find(name);
if (i != child_to_father.end())
std::cout << child << " < " << father << '\n';
}
}

关于c++ - 如何比较两个不同类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21404432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com