[英]String Arrays/Char 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;
}
我是否缺少有關數組的信息?
您不能創建這樣的數組,因為必須在編譯時知道其長度(即,它不能是諸如StudentNum + 1
之類的表達式的結果)。
您可以解決此問題,因為根據問題定義,您知道數組大小的上限,因此可以將其用作編譯時間常數。
但是,完全不使用數組就可以解決該問題。 仔細閱讀措辭。
沒有數組的解決方案的提示 :將數組想像成一張紙(變量),所有名稱都一個接一個地寫。 如果不使用數組,則意味着您必須能夠解決問題,而不必一次查看所有名稱 。 你會怎樣來回答,如果我只允許你看到的名字一個接一個 ?
另一個提示:如果班上有幾萬億名學生(唯一的名字不少於其他),也就是這個問題仍然可以解決,即在任何時候都超過了計算機的內存。
考慮問題陳述的實際要求。 您的程序只需要按字母順序輸出名字和姓氏。 您實際上需要存儲所有名稱來做到這一點嗎?
只是為了好玩,這就是我的做法。 除非准備好向您的老師解釋它是如何工作的,否則不要上交它。
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";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.