我正在尝试解决以下问题:
编写程序,该程序将从用户那里获得

  • 航类数(N)
  • 火车的目的地(城市)
  • 特定目的地(编号)的火车号码
  • 想要的目的地城市的名称,我们正在其搜索可能的火车。
    该程序应找到并显示前往所需目的地的所有列车编号。如果没有这样的火车,程序必须显示"Unreachable city!"

  • 现在的问题是,我编写了一个代码,该代码找到了这样的火车号,但没有找到所有火车的号,因此它无法显示前往所需目的地的所有火车号。
    即如果我输入以下数据:
    3
    Chicago I-789
    Chicago J-159
    Chicago A-465
    Chicago
    
    它只显示最后的火车号码A-465,而正确的答案是:I-789 J-159 A-465
    #include <iostream>
    #include <string>
    using namespace std;
    
    class MyClass {
    
      public:
    
        string city;
        string number;
    
    };
    
    int main() {
    
        int N;
        cin >> N;
    
      MyClass myObj;
    
     for (int i=0; i<N; i++){
         cin>>myObj.city;
         cin>>myObj.number;
     }
     string destination;
     cin >> destination;
         if(myObj.city==destination){
             cout << myObj.number;
         }
         else{
             cout << "Unreachable city!";
         }
      return 0;
    }
    

    最佳答案

    对您的评论:

    编程语言只是工具。您可以使用它们来解决问题。如果您不知道如何使用工具,则无法解决问题。您的计算机是一种工具,如果您不知道如何操作它,就无法做作业。这并不意味着计算机很难使用。同样,C++是一种工具,如果您不了解它,并不意味着很困难。
    让我们解决这个问题。
    问题

    让我们分解一下

  • 仔细阅读问题,我们可以看到不仅有“一列”火车,而且有多列“火车”。
  • 我们必须接受用户(想要的目标)的输入
  • 然后,我们必须找到前往该城市的所有“火车”。
  • 如果未找到火车,我们将打印“无法到达的城市!”

  • 您的代码有问题
    您的代码的问题在于只有“一列火车”:
      MyClass myObj;  //one object only
    
    每次您从用户那里获取输入时,您都会覆盖它的值。
    学习工具
    那么,您该怎么做才能解决此问题?在编程中,当我们想存储同一对象的多个值时,通常会创建一个数组。数组只是一种类型的值的集合。例:
    int myarray[5]; //can store 5 "int" values
                    //size is given inside the [] (square brackets)
    
    数组索引从0开始。我们可以将值存储在数组中,如下所示:
    cin >> myarray[0];  //take input from user and store it into the "first" place in our array
    cin >> myarray[1]; //store in the "second" place
    cin >> myarray[4]; //store in the "last" place
    cin >> myarray[5]; //WRONG! Don't do this. It will result in errors and bugs!! (Undefined Behaviour)
    
    您还可以直接存储值:
    int myarray[5] = {1, 2, 3, 4, 5};
    cout << myarray[3]; // prints "4"
    
    很好,但是数组存在一个小问题。创建数组之前,我们必须知道数组的“大小”。
    int N;
    cin >> N;
    int array[N]; //WRONG, even it works, this is wrong.
    
    那么,我们该怎么办?我们无法知道我们一直想要的对象数量。不用担心,因为C++为我们提供了一个不错的容器:std::vector,可用于解决此问题。
    #include <vector> // you need this for vector
    int N;
    cin >> N;
    std::vector <int> myvector(N); //vector of size N
    
    //access the values as you would with the array
    myvector[0] = 10;
    myvector[5] = 9; //WRONG.
    
    解决你的问题
    请注意,我不会直接为您提供解决方案,而是会向您展示方法并为您提供工具。这是您的问题,这是您的挑战,而且,如果您尝试尝试,很容易解决问题。
    因此,我们了解了 vector 和数组。接下来,您可能想知道如何为您的类型创建 vector 。简单:
    //create a vector, with size = N
    vector <MyClass> Trains (N);
    
    //take input from user
    for (int i=0; i<N; i++){
      cin >> Trains[i].city;
      cin >> Trains[i].number;
    }
    
    最后一部分,将非常相似。您需要一个循环,然后遍历 vector 中的所有值以找到所需的“目的地”。

    边注
    您应该以一种容易和自然地考虑问题的方式来命名对象和变量。例如:
    class MyClass
    
    这不会告诉任何人任何有关您的类(class)或您想如何处理的内容。有什么更好的名字呢?考虑到这个问题,我建议使用名称Train:
    class Train {};
    
    问题还告诉我们,每列火车都有一个“目的地城市”和一个“火车号码”。我们可以重构我们的Train类以包含以下内容:
    class Train {
      public:
        string destination;
        string number;
    };
    

    关于c++ - 航类目的地检查程序-C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63283701/

    10-14 08:19