这就是我要做的事情:
老师要求所有学生根据他们的名字排列单个文件。例如,在一个班级中,艾米将处于前线,而约兰达将在最后。编写一个程序,提示用户输入班级中的学生人数,然后循环读取多个名称。一旦读完了所有的名字,它就会报告哪个学生位于该行的前面,哪个学生位于该行的末尾。你可以假设没有两个学生有相同的名字。输入验证:对于学生人数,不要接受小于1或大于25的数字。
这是我到目前为止所做的:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
int StudentNum;
cout << "How many student are in the class?\n";
cin >> StudentNum;
char sname[StudentNum + 1][25];
if (StudentNum < 1 || StudentNum > 25)
{
cout << "Please enter a number between 1-25 and try again\n";
return 0;
}
for (int i = 1; i <= StudentNum; i++);
{
cout << "Please enter the name of student #" << i << endl;
cin >> sname[i];
}
for (int output = 0; output <=StudentNum; output++);
{
cout << endl << sname[output] << endl;
}
system ("pause");
return 0;
}
我是否遗漏了有关数组的内容?
答案 0 :(得分:3)
您不能创建这样的数组,因为它的长度必须在编译时知道(即,它不能是StudentNum + 1
等表达式的结果。
您可以解决此问题,因为通过问题定义,您知道数组大小的上限,因此您可以将其用作编译时常量。
但是,这个问题可以在没有使用数组的情况下解决。仔细阅读措辞。
提示没有数组的解决方案:将数组视为一张纸(变量),所有名称一个接一个地写入。不使用数组意味着您必须能够解决问题,而无需一次查看所有名称。如果我只允许您逐个查看名称
另一个暗示:如果课堂上有数万亿学生(并且名字不小于此),问题仍然可以解决,也就是说,任何时候都可能超出计算机的内存。
答案 1 :(得分:1)
答案 2 :(得分:0)
考虑问题陈述实际上要求的内容。您的程序只需要按字母顺序输出名字和姓氏。你真的需要存储所有这些名字吗?
答案 3 :(得分:0)
只是为了好玩,我就是这样做的。除非准备好向老师解释它是如何工作的,否则不要将其打开。
struct MinMax {
std::string min;
std::string max;
MinMax& operator+(const std::string& kid) {
if( min.empty() || kid < min) min = kid;
if( max.empty() || kid > max) max = kid;
return *this;
}
};
int main() {
int nKids;
std::cout << "How many students? " << std::flush;
std::cin >> nKids;
std::cout << "Enter students' names, followed by EOF\n";
MinMax mm(std::accumulate(
std::istream_iterator<std::string>(std::cin),
std::istream_iterator<std::string>(),
MinMax()));
std::cout << mm.min << ", " << mm.max << "\n";
}