我正在尝试解决以下问题:
编写程序,该程序将从用户那里获得
该程序应找到并显示前往所需目的地的所有列车编号。如果没有这样的火车,程序必须显示
"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/