在班上找到最长的名字
finding the longest name in a class
我有3个课程,老师和学生,老师和学生继承了人类的属性,我的班级如下
class human{
public:
string firstname;
string lastname;
}
class teacher:public human{
public:
int card_number;
}
class student:public human{
public:
int studen_num;
}
我想编写一个比较teachers
和students
的函数,然后它应该在数组的帮助下以最长的名称打印一个函数,我该怎么做?
这就是我尝试的
void st(students1,teachers2){
if (str_length(s1.name) > str_length(s2.name))
cout<<s1.name;
else
cout<<s2.name;
}
我不知道如何使用数组
当您通过将不会更改的指针传递时,请尝试使用const。除非您打算在某个时候将论点作为无效,否则您不应将其作为指针。在这种情况下,我们始终希望矢量至少有一个人。如果要动态的话,最好将std :: vector用于容器而不是数组。这样,您就无需跟踪您拥有多少人。
string max( const std::vector< Human > & _human_vec )
{
std::vector< Human >::iterator human_vec_it = _human_vec.begin();
std::string longest_last_name;
for( human_vec_it; human_vec_it != _human_vec.end(); ++human_vec_it )
{
if( *human_vec_it.lastname.size() > longest_last_name )
longest_last_name = *human_vec_it.lastname;
}
return longest_last_name;
}
这是我在Stackoverflow上的第一个答案,因此我希望我正确遵守规则。如果我犯了一个错误,请告知我。
您的问题中有歧义:
- 您有两个数组,一个用于
teachers
,一个用于students
? - 教师和学生之间是否有一对一的对应关系?否则,如果您只想要任何最长的姓氏
human
,则将老师与学生进行比较以找到最长的名字。
假设您只想要最长的lastname
的human
:
- 将所有
teachers
和students
存储在human
数组(多态性) - 一次通过此数组迭代,然后检查每个元素的
lastname
的长度 - 如果此长度大于到目前为止所看到的
max
,请更新相应的max
值。
我建议按名称长度对数组降序排序。
第一个位置的名称将是最长的:
bool Order_By_Name_Length(const Human& h1, const Human& h2)
{
const unsigned int h1_length = h1.firstname.length() + h1.lastname.length();
const unsigned int h2_length = h2.firstname.length() + h2.lastname.length();
return h1_length > h2_length;
}
//...
std::sort(&students1[0], &students[LAST_STUDENT_INDEX], Order_By_Name);
std::sort(&teachers1[0], &teachers[LAST_TEACHER_INDEX], Order_By_Name);
通过向人类添加length
方法,这可能会更容易:
class Human
{
public:
string firstname;
string lastname;
unsigned int length(void) const
{
return firstname.length() + secondname.length();
}
};
bool Order_By_Name2(const Human& h1, const Human& h2)
{
return h1.length() > h2.length();
}
相关文章:
- 没有找到相关文章