-2

最近我在 C++ 中遇到了一个特殊的问题:

创建一个名为 student 的类,其中包含以下成员:roll、name 和 course。编写一个程序,读取n个学生的信息,然后在输入roll no范围内显示学生的信息。使用构造函数和成员函数。

在没有使用数据库的情况下,如何在输入 roll_no 范围内显示信息?听起来很奇怪。

我有一个简单的解决方案,如下所示: 但是,我想要一个更好的算法,它在内存和处理器速度方面更经济。

 #include<iostream.h>
     #include<conio.h>
     class student
     {
       int roll;
       char name[100];
       char course[100];
       public:void getData();
          void disp(int r1,int r2)
          {
            if(roll>=r1 && roll<=r2)
            cout<<"\nroll_no:"<<roll<<"\tname:"<<name<<"\tcourse:"<<course;
          }
     };
     void student::getData()
     {
        cout<<"\nEnter roll_no,name and course\n";
        cin>>roll>>name>>course;
     }
     void main()
     {
       student s[100];
       int n,r1,r2;
       clrscr();
       cout<<"\nEnter no of students\n";
       cin>>n;
       for(int i=0;i<n;i++)
        s[i].getData();
       cout<<"\nEnter the range\n";
       cin>>r1>>r2;
       for(int j=0;j<n;j++)
        s[j].disp(r1,r2);
       getch();
     }
4

2 回答 2

1

如果您有讲师,请询问讲师 roll_no 是否自动递增,或者它是否是用户输入的一部分。澄清需求是工作1。

您需要一个容器,例如矢量或地图来保存所有对象。

  • 输入一个对象并存储到容器中。
  • 重复直到用户说不再输入。
  • 如果使用向量,则按 roll_no 排序。
  • 提示用户打印的开始范围和结束范围。
  • 在容器中搜索大于或等于起始范围的第一个 roll_no。
  • 从容器中的该位置打印,直到 roll_no 大于或等于结束范围。

实施留给读者作为练习。

于 2013-08-27T14:57:00.117 回答
0

这是您锻炼的解决方案:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

struct Student{
    Student(unsigned int r) : roll(r), name(), course() {}
    unsigned int roll;
    string name;
    string course;
};

int main(){
    vector<Student> students;
    //populate the vector with meaningful data, here only roll is written
    for(unsigned int i = 0; i < 100; i++)
        students.push_back(Student(i));

    unsigned int min = 45;
    unsigned int max = 85;
    auto operation = [=](const Student& e){if( (e.roll >= min) and (e.roll <= max) ) cout << e.roll << endl;};
    for_each(students.begin(), students.end(), operation);
}

你可以在这里试试。

当然,这里的一切都是虚拟的,这段代码的目的是向您展示如何处理对象集合。

于 2013-08-27T15:17:35.523 回答