对于我的作业,我必须制作一个程序,从标准输入读取学生数据,按姓氏/名字排序,并将结果打印到标准输出。学生包括姓氏,名字和平均成绩。它说不超过50名学生。 它还说你不应该依赖外部库函数来进行排序。
以下是示例:
Ware Henry 87.2
Dantes Edmond 91.4
Earhart Amelia 92.6
以下是如何排序的:
Dantes Edmond 91.4
Earhart Amelia 92.6
Ware Henry 87.2
以下是我到目前为止无法正常运行的代码:
#include <iostream>
#include <string>
using namespace std;
class student
{
public:
student();
void input();
void output();
void sort();
private:
string Fname;
string Lname;
float gpa;
}
student::student()
{
Fname = "";
Lname = "";
gpa = 0;
}
void student::input()
{
cout << "Enter first name, last name, and gpa"<<endl;
cin >> Fname >> Lname >> gpa;
}
void student::sort()
{
char temp;
int count = 0;
int i = 1;
while (i < word.size()) {
if (word[i - 1] > word[i]) {
temp = word[i];
word[i] = word[i + 1];
word[i + 1] = temp;
i++;
if (i >= word.size())
{
alpha(word);
}
}
else
{
count++;
}
}
return word;
}
void main()
{
student.input();
}
关于我哪里出错以及任何可能的解决方案的任何建议?
答案 0 :(得分:1)
您的student
班级的成员变量只能容纳一名学生,您需要50名班级学生。
然后你应该把这些实例放在一个数组/向量中(无论你允许使用哪个容器)我假设你需要使用一个原始数组,这样就可以了。
student* students = new student[50];
你需要的是你的类中的比较函数能够对数组进行排序,比较函数知道你的类的内部,你可以决定如何对列表进行排序,例如姓氏之后。
sort函数可以在您的类中声明为静态函数,或者更逻辑地是外部函数,因为student
不是student
实例的容器。
完成后不要忘记删除数组
delete [] students;
在实际问题中你会使用std容器,例如算法排序这种工作。
答案 1 :(得分:0)
您的编译器必须告诉您排序方法中使用的word
和alpha
是未声明的标识符,并且已分配计数但从未使用过。
解决方案:永远不要从狂野的网络中窃取代码而不了解它的作用。你可以把别人的代码作为灵感,但盲目的复制粘贴是一个很大的禁忌。
为了给你下一步:你甚至没有存储你的学生,你只需输入一个,你如何只对一个条目进行排序?思考(和编码)您应该使用什么来存储它们,并从那里开始如何对它们进行排序。
祝你好运。答案 2 :(得分:0)
您的代码无法正常工作的原因有多种,首要原因是您的类定义需要分号';'最后关闭它。
class student
{
public:
student();
void input();
void output();
void sort();
private:
string Fname;
string Lname;
float gpa;
}; //semicolon here
在sort()方法中,使用变量字但从未声明,编码不是魔术,变量必须在使用之前声明和初始化,就像在代码中一样。
while (i < word.size()) { //word must be declared somewhere
此外,在sort方法中,您调用函数alpha(word)
,程序中不存在此函数。
sort方法的类型为void,这意味着它不会返回任何内容,但是你试图返回一个字符串。
sort方法的另一个问题是它永远不会从任何地方调用,永远不会被运行。
您尝试使用课程的方式也存在很大问题。要使用类的方法,首先必须实例化该类的对象,然后可以通过对象访问类的方法,如下所示:
int main()
{
student theStudent;
theStudent;
theStudent.input();
return 0;
}
另一个基本问题是你只是要获取这样一个对象的数据,你需要将几个对象存储在类似于数组的东西中,然后对数组中的对象进行排序:
int main()
{
student students[5];
for (int i = 0; i < 5; i++)
{
student newStudent;
students[i] = newStudent;
newStudent.input();
}
sort(students);
delete[] students;
return 0;
}
这将我们带到排序方法。明智的做法是不将排序作为学生类的方法,而是作为一个从main调用的函数(如上例中所示),这样就很容易从main对学生对象数组进行排序。
这些是一些建议,但我不打算为你做完整的功课,如果你使用谷歌和一些宝贵的能量,我相信你会成功。