字符串数组/字符数组

时间:2011-03-31 23:14:08

标签: c++ arrays

这就是我要做的事情:

老师要求所有学生根据他们的名字排列单个文件。例如,在一个班级中,艾米将处于前线,而约兰达将在最后。编写一个程序,提示用户输入班级中的学生人数,然后循环读取多个名称。一旦读完了所有的名字,它就会报告哪个学生位于该行的前面,哪个学生位于该行的末尾。你可以假设没有两个学生有相同的名字。输入验证:对于学生人数,不要接受小于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;
}

我是否遗漏了有关数组的内容?

4 个答案:

答案 0 :(得分:3)

您不能创建这样的数组,因为它的长度必须在编译时知道(即,它不能是StudentNum + 1等表达式的结果。

您可以解决此问题,因为通过问题定义,您知道数组大小的上限,因此您可以将其用作编译时常量。

但是,这个问题可以在没有使用数组的情况下解决。仔细阅读措辞。

提示没有数组的解决方案:将数组视为一张纸(变量),所有名称一个接一个地写入。不使用数组意味着您必须能够解决问题,而无需一次查看所有名称。如果我只允许您逐个查看名称​​

另一个暗示:如果课堂上有数万亿学生(并且名字不小于此),问题仍然可以解决,也就是说,任何时候都可能超出计算机的内存。

答案 1 :(得分:1)

C ++数组维度必须在编译时知道(即在运行时不依赖于用户输入的变量)。改为使用字符串:

string sname[25];

如果您使用char数组之外的其他内容,则还可以使用vector

答案 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";
}