C ++排序播放器

问题描述 投票:-1回答:2

几个人在玩游戏。每个玩家都有一定数量的胜利和失败(可能相等或不同)。编写一个程序,打印每个程序的名称和最终结果。

注意:如果有一个玩家多次尝试,那么胜利和损失将加到最终结果中。

输入•在收到字符串“ End”之前,将按以下顺序为您提供球员的信息:o名称:字符串o胜利:正整数o损失:一个正整数

using namespace std;
int main()
{
    char str[100][20], t[20];
    int i, j;

    int n;
    cin >> n;
    int first[100];
    int second[100];


    for (i = 0; i < n; i++)
    {
        cout << " ";
        cin >> str[i];




            cin >> first[i];
            cin >> second[i];
    }




    for (i = 1; i < n; i++)
    {
        for (j = 1; j < n; j++)
        {
            if (strcmp(str[j - 1], str[j]) > 0)
            {
                strcpy_s(t, str[j - 1]);
                strcpy_s(str[j - 1], str[j]);
                strcpy_s(str[j], t);
            }
        }
    }
   // cout << "\n Names Sorted in Alphabetical Order : \n\n";
    for (i = 0; i < n; i++)
    {
        cout << " ";
        cout << str[i] <<endl;
        cout << first[i] - second[i] << endl;
    }

    return 0;
}
c++
2个回答
0
投票

首先,您对数据结构的选择值得怀疑。本质上,您具有并排的三个数组,在修改其中任何一个的“顺序”时,必须全部保持[[together。这是代码中缺少的关键逻辑部分。

第二,您正在使用标准C ++库的

none

,除了进行IO操作外。尽管这可以编译,甚至可以工作,但您并没有满足任意条目数的键属性。您的代码假定第一个输入是玩家人数。问题描述中没有任何地方可以验证该假设。在读取名称"End"之前,和/或在标准输入(stdin)被认为是eof的前提下,您应该一直读着名称,胜利,损失三重奏[[continuous]],直到(stof被认为是安全的)。 Dynamic是必需的存储,并且C ++标准库作为众多可用的容器来使之成为可能,最常见的是std::vector#include <iostream> #include <vector> #include <string> #include <utility> int main() { std::vector< std::string > names; std::vector< int > wins; std::vector< int > losses; std::string name; int win; int loss; while (std::cin >> name && (name != "End") && std::cin >> win >> loss) { names.emplace_back(name); wins.emplace_back(win); losses.emplace_back(loss); } size_t len = names.size(); while (len-- > 0) { for (size_t j = 0; j < len; ++j) { if (names[j + 1] < names[j]) { // swap all three arrays std::swap(names[j + 1], names[j]); std::swap(wins[j + 1], wins[j]); std::swap(losses[j + 1], losses[j]); } } } std::cout << "Names Sorted in Alphabetical Order:\n"; for (size_t i = 0; i < names.size(); ++i) { std::cout << names[i] << '\n'; std::cout << wins[i] - losses[i] << '\n'; } return 0; } 注意,这是
不可思议的
不可维护的。随着越来越多的信息与每个名称相关联(不仅赢了,而且输了,还包括家庭住址,电话号码,演奏方式或位置等),维护更多的数组成为噩梦。相反,您选择一个

object

来承载所有玩家信息,并选择一个容器保存该对象的实例。毫无疑问,您将在学习中学习更多。
但是同时,上面的代码符合问题陈述,同时解决了所发布代码中缺少的关键逻辑部分。如果您要在排序过程中交换姓名,则也必须交换赢/输记录,因此,处于任意位置n的玩家都会获得其赢/输信息。

-2
投票
© www.soinside.com 2019 - 2024. All rights reserved.