gpt4 book ai didi

c++ - 有没有办法可以将字符串数组成员放在 ".structurevariable"前面?

转载 作者:行者123 更新时间:2023-11-27 23:36:39 27 4
gpt4 key购买 nike

因此,为了避免让自己头疼(反而制造头疼),我试图将一个字符串数组成员放在同名的结构变量前面,但它不起作用并给我一个错误: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;

那么你可以使用 data["Jan"] 而不是 Jan。使用 map ,您还可以使用 data[monthNames[i]] 对其进行索引。

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

monthlyData data[12];

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

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

等等……

关于c++ - 有没有办法可以将字符串数组成员放在 ".structurevariable"前面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58719964/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com