C++ 查找类中最长的名称

C++ 查找类中最长的名称,c++,C++,我有三个类人类,教师和学生,教师和学生继承人类的属性我的类如下 class human{ public: string firstname; string lastname; } class teacher:public human{ public: int card_number; } class student:public human{ public: int studen

我有三个类人类,教师和学生,教师和学生继承人类的属性我的类如下

class human{
        public:
        string firstname;
        string lastname;

}

class teacher:public human{
        public:
        int card_number;
}

class student:public human{
        public:
        int studen_num;
}
我想写一个函数来比较老师和学生的姓氏,然后它应该在数组的帮助下打印出最长的名字,我该怎么做

这就是我试过的

void st(students1,teachers2){
if (str_length(s1.name) > str_length(s2.name))
   cout<<s1.name;
   else
   cout<<s2.name;

}

我不知道如何使用数组

您的问题有歧义:

你们有两个数组吗,一个给老师,一个给学生? 老师和学生之间有一对一的通信吗?否则,如果你只想让任何人拥有最长的姓氏,那么比较老师和学生来找出最长的名字就没有意义了。 假设您只需要姓氏最长的人:

将所有教师和学生存储在人类数组中 遍历此数组一次,并检查每个元素的长度和姓氏 如果此长度大于目前看到的最大值,请更新相应的最大值。
当您传入一个不会被更改的指针时,请尝试使用const。除非计划在某个点将参数设为NULL,否则不应将其作为指针传递。在这种情况下,我们总是希望向量至少有一个人。如果容器是动态的,最好使用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的第一个答案,所以我希望我正确地遵守了规则。如果我犯了错误,请告诉我。

我建议按名称长度降序排列数组。 第一个位置的名称最长:

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);
通过向human添加长度方法,这可能会更容易:

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();
}

为什么它必须是一个数组?这是你的家庭作业吗?你试过什么吗?让我给你看看我试过什么我想要这样的东西谢谢让我检查一下