簡體   English   中英

字符串數組/字符數組

[英]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之類的表達式的結果)。

您可以解決此問題,因為根據問題定義,您知道數組大小的上限,因此可以將其用作編譯時間常數。

但是,完全使用數組就可以解決該問題。 仔細閱讀措辭。

沒有數組的解決方案的提示 :將數組想像成一張紙(變量),所有名稱都一個接一個地寫。 如果不使用數組,則意味着您必須能夠解決問題,而不必一次查看所有名稱 會怎樣來回答,如果我只允許你看到的名字一個接一個

另一個提示:如果班上有幾萬億名學生(唯一的名字不少於其他),也就是這個問題仍然可以解決,即在任何時候都超過了計算機的內存。

必須在編譯時知道C ++數組的維數(即在運行時不依賴於用戶輸入的變量)。 使用字符串代替:

string sname[25];

如果您使用的不是char數組,則還可以使用vector

考慮問題陳述的實際要求。 您的程序只需要按字母順序輸出名字和姓氏。 您實際上需要存儲所有名稱來做到這一點嗎?

只是為了好玩,這就是我的做法。 除非准備好向您的老師解釋它是如何工作的,否則不要上交它。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM