在班上找到最长的名字

finding the longest name in a class

本文关键字:      更新时间:2023-10-16

我有3个课程,老师和学生,老师和学生继承了人类的属性,我的班级如下

class human{
        public:
        string firstname;
        string lastname;
}
class teacher:public human{
        public:
        int card_number;
}
class student:public human{
        public:
        int studen_num;
}

我想编写一个比较teachersstudents的函数,然后它应该在数组的帮助下以最长的名称打印一个函数,我该怎么做?

这就是我尝试的

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,则将老师与学生进行比较以找到最长的名字。

假设您只想要最长的lastnamehuman

  • 将所有teachersstudents存储在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();
}
相关文章:
  • 没有找到相关文章