如何在C ++中迭代类对象的字符串变量?

时间:2016-09-09 06:20:49

标签: c++

所以这里我有一个Car的类定义,然后我用它创建一个carObject。我希望用户输入carObject中所有变量的值。正如你在这里看到的那样,我已经设法获得了用户输入,但在我看来,我解决这个问题的方法效率很低。

我注意到除了第一个用户输入之外的所有用户输入非常相似。我想使用某种循环来迭代声明语句或语句块,并且每次都更改变量。我想把一个if语句只为循环的第一次迭代输入不同的输入。我知道在bash中我可以使用字符串变量来代表变量名,但我不知道C ++中是否可能。

请注意,对象名称不会更改,只会更改与其关联的变量。我也对用户输入使用相同的单词,最好每次迭代都应该更改。我还有一系列类似命名的数组。这些数组的目的是告诉用户哪些选项可用于特定变量。

虽然我以前有编程经验,但我对C ++比较陌生。作为我的问题的解决方案的代码块涉及调用另一个函数将适合我的目的。以下是我的代码。

    #include <iostream>
    #include <string>
    using namespace std;

    class Car {
    public:

    string Name;
    string Model;
    string Color;
    string Transmission;
    string Category;
    };

    int main() {

    Car CarObject;

    string modelOptions [3] = { "Ferrari", "Porsche", "Nissan" };
    string colorOptions [4] = { "Blue", "Red", "Green", "White" };
    string transmisionOptions [2] = { "Automatic", "Manual" };
    string categoryOptions [3] = { "A", "B", "C" };

    cout << "Enter " << "name" << " for Car 1." << endl;
    cin >> carObject.Name;
    cout << endl;

cout << "Enter " << "model" << " for Car 1." << endl;
cout << "Options are:";
for (const string &text: modelOptions) {
    cout << " " << text;
}
cout << "." << endl;
cin >> carObject.Model;
cout << endl;

cout << "Enter " << "color" << " for Car 1." << endl;
cout << "Options are:";
for (const string &text: colorOptions) {
    cout << " " << text;
}
cout << "." << endl;
cin >> carObject.Color;
cout << endl;

cout << "Enter " << "transmission" << " for Car 1." << endl;
cout << "Options are:";
for (const string &text: transmissionOptions) {
    cout << " " << text;
}
cout << "." << endl;
cin >> carObject.Transmission;
cout << endl;

cout << "Enter " << "category" << " for Car 1." << endl;
cout << "Options are:";
for (const string &text: categoryOptions) {
    cout << " " << text;
}
cout << "." << endl;
cin >> carObject.Category;
cout << endl;

...

return 0;

}

2 个答案:

答案 0 :(得分:0)

void Car::InputParameter(string& param, const string &msg, const vector<string>& options)
{
    cout << msg << endl;

    for (const string &text: options) {
          cout << " " << text;
    }

    cout << "." << endl;

    cin >> param;

    cout << endl;
}

我想你可能想要这样的东西。你只需为每个成员打电话。

答案 1 :(得分:0)

这段代码:

cout << "Enter " << "category" << " for Car 1." << endl;
cout << "Options are:";
for (const string &text: categoryOptions) {
    cout << " " << text;
}
cout << "." << endl;
cin >> carObject.Category;
cout << endl;

...可以通过调用这样的函数来替换:

carObject.Category = userInput( "category", categoryOptions );

显然它会返回string(即std::string)。

最好将options参数设为vector<string>

然后只需用该函数的ditto调用替换其他类似的块。

将该函数作为Car

的成员函数是否是一个好主意

没有

例如,考虑如何在GUI程序(图形用户界面)中使用Car