gpt4 book ai didi

c++ - 如何更好地检查两个 char 变量是否在某些值集中?

转载 作者:行者123 更新时间:2023-12-01 08:29:55 24 4
gpt4 key购买 nike

最近,我们的教授要求我们使用两个 char变量(天)来接收用户的输入。

下面的代码可以很好地作为检查,以确保 Mo、Tu、We、Th、Fr、Sa、Su 是仅有的两个作为一对一起输入的字符。如果接收到其他任何内容作为输入,它将循环并要求用户提供有效输入。

输入应该不区分大小写,这意味着,例如,"mO""tu"是可以接受的。似乎有很多重复正在发生。有没有办法清理这个?

cout << "Please enter the day of the week did you made the long distance call (Mo Tu We Th Fr Sa Su): ";
cin >> dayOne >> dayTwo;

while ((dayOne != 'M' && dayOne != 'm' || dayTwo != 'O' && dayTwo != 'o') &&
(dayOne != 'T' && dayOne != 't' || dayTwo != 'U' && dayTwo != 'u') &&
(dayOne != 'W' && dayOne != 'w' || dayTwo != 'e' && dayTwo != 'E') &&
(dayOne != 'T' && dayOne != 't' || dayOne != 'H' && dayTwo != 'h') &&
(dayOne != 'F' && dayOne != 'f' || dayTwo != 'R' && dayTwo != 'r') &&
(dayOne != 'S' && dayOne != 's' || dayTwo != 'A' && dayTwo != 'a') &&
(dayOne != 'S' && dayOne != 's' || dayTwo != 'U' && dayTwo != 'u'))
{
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout << endl << "You have entered an invalid day. Please re-enter a day in the correct format (Mo Tu We Th Fr Sa Su): ";
cin >> dayOne >> dayTwo;
}

最佳答案

你可以写一个 fold-expression将 2 个字符与字符串进行比较:

template<typename ...Days>
bool any_of(char a, char b, Days ...days)
{
return (... || (a == days[0] && b == days[1]));
}

然后像这样使用它:
while (! any_of(std::tolower(dayOne), std::tolower(dayTwo), "mo", "tu", "we", "th", "fr", "sa", "su"))
// keep asking for input

这是一个 demo .

这应该满足使用 2 char 的要求输入。

关于c++ - 如何更好地检查两个 char 变量是否在某些值集中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62411825/

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