-7

我有 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;

}

我不知道如何使用数组来做到这一点

4

3 回答 3

1

你的问题有歧义:

  • 你有两个数组,一个 forteachers和一个 for students
  • 老师和学生之间有一对一的通信吗?否则,如果您只想找到human最长姓氏的任何一个,那么将教师与学生进行比较以找到最长的名字是没有意义的。

假设您只想要human最长的lastname

  • 将所有的teachers和存储students在一个human数组中(多态性)
  • 遍历这个数组一次并检查lastname每个元素的长度
  • 如果这个长度大于max到目前为止看到的,更新相应的max值。
于 2012-12-20T19:53:32.760 回答
1

当您传入一个不会被更改的指针时,请尝试使用 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 上的第一个答案,所以我希望我能正确遵守规则。如果我犯了错误,请告诉我。

于 2012-12-20T20:53:59.527 回答
0

我建议按名称长度降序对数组进行排序。
第一个位置的名称将是最长的:

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();
}
于 2012-12-20T21:06:47.613 回答