【问题标题】:C++ list with array of strings带有字符串数组的 C++ 列表
【发布时间】:2017-06-05 15:41:20
【问题描述】:

我必须用 C++ 列出人员和他们的考试成绩。我的问题是我不知道如何输入数组。 我试图制作 3D 字符串数组,但它不起作用。 一定在功能上!如果您有更好的建议,我将不胜感激
我的输入必须是这样的:
彼得·埃文斯 4.86
*其他人**
*该组的平均结果**
*成绩最高的那个**
*成绩最低的那个**
这就是我现在所做的:

#include <iostream>
#define MAXN 200
#define MAXM 200
#define MAXX 200
using namespace std;
void input(char list[][MAXN][MAXM], int n) {
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++) {
            for (int p = 0; p < n; p++)
                cin >> list[i][j][p];
        }
}
int main() {
    char list[31][MAXN][MAXM];
    int n;
    cin >> n;
    input(list, n);
    return 0;
}

【问题讨论】:

  • 既然是 C++ 为什么不使用实际的strings?
  • 听起来您确实需要一个具有名称(std::string)和结果成员的数据结构。然后你就可以拥有这些向量,你的生活会轻松很多。
  • 嗯,这是学校的作业,所以我应该只使用我在学校学过的东西。
  • 你能提供给出的确切输入吗?
  • @Drt 他们没有学习 std::string 和 std::vector,而是数组。他们必须将它们用于字符串 => YAIT

标签: c++ arrays string list


【解决方案1】:

您不需要运行第三次迭代,因为您不必逐个字符地存储输入的字符。第三维可用于存储整个字符串。

试试下面的方法。请注意我在您的 sn-p 中所做的更正。

#include <iostream>
#define MAXN 200
#define MAXM 200
#define MAXX 200
using namespace std;
void input(char list[][3][MAXM], int n) {
    for (int i = 0; i < n; i++) //number of entries
        for (int j = 0; j < 3; j++) { //3 fields - fname, lname and marks
                cin >> list[i][j];
        }
}
int main() {
    char list[31][3][MAXM];
    int n;
    cin >> n;
    input(list, n);
    return 0;
}

【讨论】:

  • 投反对票的人,请注意在不到一毫秒的时间内解释您在此答案中看到的缺陷,以便您强迫自己投反对票。
  • 好吧,但如果你坚持为他做功课,那么至少也要树立一个榜样,写用户提示和输出消息。
  • @Drt。教授您好,您的担心很有道理。在 StackOverflow,我们确实不鼓励学生按原样发布他们的家庭作业或作业问题。如果他们表现出足够的努力,我们只会帮助他们克服在完成作业或家庭作业时面临的问题。在这里,OP 显示了需要我们帮助的必要努力。
  • 谢谢。我想我对这些事情有点敏感。
【解决方案2】:

你必须使用结构体的向量。

这样定义你的结构:

typedef struct details{
    string Fname;
    string Lname;
    float marks;
} details;

矢量应该看起来像

vector< details > info;

我只是在下面的代码中向您展示如何实现这一点:

void insertValues(vector< details >& info){

    int n;
    details d;
    cout<<"Enter the size of record: ";
    cin>>n;
    cout<<"Enter records: "<<endl;

    for(int i=0;i<n;i++){
         cin>>d.Fname>>d.Lname>>d.marks;
         info.push_back(d);
    }

}

void LowestScorer(vector< details > info){

    details d;
    vector< details >::iterator it=info.begin();
    d=*it;
    for(;it!=info.end();it++){
        if(d.marks > it->marks){
            d=*it;
        }
    }
    cout<<"Lowest Scorer: "<<d.Fname<<" "<<d.Lname<<" "<<d.marks<<endl;
}

main 应该是这样的:

    int main(){

    vector< details > info;

    insertValues(info);
    LowestScorer(info);
    return 0;
}

【讨论】:

  • 我没有测试过这段代码,但我认为它应该可以正常工作。如果有任何错误,戳我。
  • 如果他不被允许,他就不必这样做。他可以使用数组并且可以重新分配内存。当然它是 C 代码,但似乎这是约束。你可以用你目前学到的有限的东西来实现你自己的向量类。
  • @AndreKampling 是的.. 似乎 OP 在学习 c 后才转向 c++。他应该向 STL 介绍自己。但是总是欢迎指出错误。更好的学习方法是犯错误并纠正它们
【解决方案3】:

正如上面cmets所说,现在是学习vector的好时机。这很容易。下面是一个非常简单整洁的解决方案:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

typedef vector<pair<string, string> > Container;

int main()
{
  Container container;
  container.push_back(make_pair("Peter Evens", "4.86"));
  container.push_back(make_pair("Other name", "his score"));
  return 0;
}

【讨论】:

  • OP要使用一个函数
  • @VidorVistrom 我在这里很困惑。上面有 cmets 提出了类似的建议(字符串向量),并且他们得到了支持。我刚刚写了一个工作演示来寻求帮助。
  • 你的想法不错...只要把它放在一个函数中并实现要求...排序,平均和所有
  • 这个想法是为了帮助他选择数据结构。业务逻辑可以由程序员自己应用。该问题没有询问有关计算平均值,排序数据等的问题。:-)
猜你喜欢
  • 2015-11-18
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多