-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

変更されないポインターを渡す場合は、const を使用してみてください。ある時点で引数を NULL にする予定がない限り、ポインタとして渡すべきではありません。この場合、ベクターには常に少なくとも 1 人の人間が必要です。動的にする場合は、配列ではなくコンテナに 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;
}

これはスタックオーバーフローに関する私の最初の回答なので、ルールを正しく守っていることを願っています。間違っていたら教えてください。

于 2012-12-20T20:53:59.527 に答える
1

あなたの質問にはあいまいさがあります:

  • teachers用と用の 2 つの配列がありますstudentsか?
  • 教師と生徒は 1 対 1 で対応していますか? それ以外の場合、最長の姓を持つものだけが必要な場合は、教師と学生を比較して最長の名前を見つけることは意味がありませんhuman

humanwith longestだけが必要だと仮定するとlastname:

  • すべてのteachersandstudentshuman配列に格納 (ポリモーフィズム)
  • この配列を 1 回繰り返しlastname、各要素の長さを確認します
  • この長さがこれまでの値より大きい場合はmax、対応する値を更新しmaxます。
于 2012-12-20T19:53:32.760 に答える
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 に答える