有没有办法把字符串数组成员放在".structurevariable"前面?
Is there a way I can put a string array member in front of ".structurevariable"?
因此,为了避免自己头疼(并创建头痛(,我试图将字符串数组成员放在同名结构变量前面,但它不起作用,并给我一个错误: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;
}
}
相关文章:
- 没有找到相关文章