有没有办法把字符串数组成员放在".structurevariable"前面?

Is there a way I can put a string array member in front of ".structurevariable"?

本文关键字:structurevariable 前面 组成员 字符串 数组 有没有      更新时间:2023-10-16

因此,为了避免自己头疼(并创建头痛(,我试图将字符串数组成员放在同名结构变量前面,但它不起作用,并给我一个错误:std::string{aka class std::basic_string}'没有名为"maxPerDay"的成员

如果有意义的话,我正试图让它读取字符串数组值,并使它输入该结构值的值。

struct monthlyData{
int planesLanded;
int planesDeparted;
int maxPerDay;
int leastPerDay;
};

这就是我的结构。

我在下面声明了monthlyData变量:

monthlyData Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec;

此外,这就是我的字符串数组的样子:

string monthNames[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

这是我试图实现的循环,我希望它能为我节省一些时间,而不必手动编码:

for (int i = 0; i < 12; i++)
{
cout << "Enter planes landed for " << monthNames[i] << endl;
cin >> monthNames[i].planesLanded;
cout << "Enter planes departed for " << monthNames[i] << endl;
cin >> monthNames[i].planesDeparted;
cout << "Enter max departures per day in " << monthNames[i] << endl;
cin >> monthNames[i].maxPerDay;
cout << "Enter least per day in " << monthNames[i] << endl;
cin >> monthNames[i].leastPerDay;
}

我只想让程序允许用户将数字输入到相应的月份结构中。我只是不想在代码上显得多余。

您可以使用以下结构的地址构建一个与月份名称"并行"的数组:

monthlyData *monthAddr[] = { &Jan, &Feb, &Mar, &Apr, &May, &Jun,
&Jul, &Aug, &Sep, &Oct, &Nov, &Dec };

然后你可以用输入

cout << "Enter planes landed for " << monthNames[i] << endl;
cin >> monthAddr[i]->planesLanded;

然而,一个更好的选择是避免重复您自己,只使用例如从月份名称到月份结构的std::map,而不是使用显式变量

std::map<std::string, monthlyData> data;

则可以使用CCD_ 2而不是CCD_。使用映射,也可以使用data[monthNames[i]]对其进行索引。

比映射更简单的是12个结构的数组,但您的代码需要使用数字索引(例如data[0]而不是Jan(:

monthlyData data[12];

但是,如果您需要引用的单个名称,您可以创建引用以使代码更可读

auto& Jan = data[0];
auto& Feb = data[1];
auto& Mar = data[2];
auto& Apr = data[3];

等等…

您似乎正在尝试对代码进行某种反射。C++对代码反射的支持非常有限,即使在支持更强大的语言中,这也不是一个非常理想的解决方案。

您只需将月份名称与数据关联即可。

struct MonthlyData{//I've renamed the struct to CapitalCase
MonthlyData(std::string month) :
month(std::move(month)), planesLanded(0), planesDeparted(0), maxPerDay(0), leastPerDay(0)
{}
std::string month;
int planesLanded;
int planesDeparted;
int maxPerDay;
int leastPerDay;
};
int main() {
std::vector<MonthlyData> vec { 
{"Jan"},
{"Feb"},
{"Mar"},
{"Apr"},
{"May"},
{"Jun"},
{"Jul"},
{"Aug"},
{"Sep"},
{"Oct"},
{"Nov"},
{"Dec"},
};
for (auto & data : vec) {
cout << "Enter planes landed for " << data.month << endl;
cin >> data.planesLanded;
cout << "Enter planes departed for " << data.month << endl;
cin >> data.planesDeparted;
cout << "Enter max departures per day in " << data.month << endl;
cin >> data.maxPerDay;
cout << "Enter least per day in " << data.month << endl;
cin >> data.leastPerDay;
}
}
相关文章:
  • 没有找到相关文章