На ваш комментарий:
C ++ намного сложнее, чем python.
Языки программирования - это просто инструменты. Вы используете их для решения проблемы. Если вы не знаете, как пользоваться инструментом, вы не сможете решить проблему. Ваш компьютер - это инструмент, и если вы не знаете, как им пользоваться, вы не сможете делать домашнее задание. Это не значит, что компьютерами сложно пользоваться. Точно так же C ++ - это инструмент, если вы этого не знаете, это не значит, что это сложно.
Давайте перейдем к проблеме.
Проблема
Программа должна найти и отобразить все номера поездов, идущих go в желаемый пункт назначения. Если такого поезда нет, программа должна отображать «Недостижимый город!».
Давайте его разберем
- Внимательно прочитав задачу, мы увидим, что есть не просто «один» поезд, а несколько «поездов».
- Мы должны получить данные от пользователя (желаемый пункт назначения)
- Затем мы должны найти «все» «поезда», которые go этот город.
- Если поезд не найден, мы печатаем «Недостижимый город!»
Проблема с вашим кодом
Проблема с вашим кодом что есть только «один поезд»:
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.
Решение вашей проблемы
Обратите внимание, что я не дам вам решение напрямую, но я покажу вам путь и дам вам инструменты. Это ваша проблема, это ваша задача, и если вы попытаетесь, ее довольно легко решить.
Итак, мы узнали о векторах и массивах. Затем вам может быть интересно, как создать вектор для вашего шрифта. Просто:
//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;
}
Последняя часть будет очень похожей. Вам нужно al oop, затем go по всем значениям в векторе, чтобы найти нужные "места назначения".
Дополнительное примечание
Вы должны начать с наименования ваших объектов и переменных таким образом, чтобы вам было легко и естественно думать о вашей проблеме. Например:
class MyClass
Это никому ничего не говорит о вашем классе или о том, что вы хотите с ним делать. Что может быть лучше для этого? Глядя на проблему, я предлагаю имя Train
:
class Train {};
Проблема также говорит нам, что у каждого поезда есть «город назначения» и «номер поезда». Мы можем реорганизовать наш класс Train
, чтобы он содержал следующее:
class Train {
public:
string destination;
string number;
};