如何使用for循环编写以下代码?即如何使用for循环来检查是否已满足循环中出现的任何条件?我知道必须有一种方法,我确信有人可能会问这个问题,但我不太确定如何说出来。所以,如果有重复,也许你可以指出我正确的方向。
string topping;
cout << "Enter a topping ";
cin >> topping;
string toppings_offered[5] = {"onions", "bell peppers", "olives", "spinach", "tomatoes"};
if ( (topping == toppings_offered[0]) || (topping == toppings_offered[1]) || (topping == toppings_offered[2]) || (topping == toppings_offered[3]) || (topping == toppings_offered[4]))
cout << "yes";
答案 0 :(得分:3)
一点逻辑理论:
满足所有条件是一个的条件不满足。
在for()循环中,如果其中一个条件不,则答案为false。否则,这是真的。
但是,我不相信你问的是正确的问题,因为在你的例子中,一个顶部只能匹配toppings_offered的一个,而不是全部。
答案 1 :(得分:3)
在C ++ 0x中:
#include <algorithm>
#include <iterator>
#include <string>
bool is_offered(const std::string& s)
{
// look up table
static const std::string toppingsOffered[] =
{"onions", "bell peppers", /* etc */ };
const auto toppingsBegin = std::begin(toppingsOffered);
const auto toppingsEnd = std::end(toppingsOffered);
return std::find(toppingsBegin, toppingsEnd, s) != toppingsEnd;
}
if (is_offered())
std::cout << "yes";
在C ++ 03中:
#include <algorithm>
#include <string>
bool is_offered(const std::string& s)
{
// look up table
static const std::string toppingsOffered[] =
{"onions", "bell peppers", /* etc */ };
const std::string* toppingsBegin = &toppingsOffered[0];
const std::string* toppingsEnd =
toppingsBegin +
sizeof(toppingsOffered) / sizeof(std::string);
return std::find(toppingsBegin, toppingsEnd, s) != toppingsEnd;
}
if (is_offered(topping))
std::cout << "yes";
在带有实用程序的C ++ 03中:
#include <algorithm>
#include <cstddef>
#include <string>
template <typename T, std::size_t N>
T* begin(T (&array)[N])
{
return *array[0];
}
template <typename T, std::size_t N>
T* end(T (&array)[N])
{
return begin(array) + N;
}
bool is_offered(const std::string& s)
{
// look up table
static const std::string toppingsOffered[] =
{"onions", "bell peppers", /* etc */ };
const std::string* toppingsBegin = begin(toppingsOffered);
const std::string* toppingsEnd = end(toppingsOffered);
return std::find(toppingsBegin, toppingsEnd, s) != toppingsEnd;
}
if (is_offered(topping))
std::cout << "yes";
答案 2 :(得分:1)
bool isok = false;
for(...)
{
if(cond)
isok = true;
}
if(isok)
cout << "yes"
答案 3 :(得分:1)
for (int i = 0; i < 5; i++)
if (topping == toppings_offered[i])
{
cout << "yes";
break;
}
会做你的要求。您无需检查是否所有这些都已完成。您需要检查输入的顶部是否是提供的顶部之一。至少这是你的代码所暗示的。
希望它有所帮助!
答案 4 :(得分:0)
int i;
for( i = 0; i < sizeof(toppings_offered) / sizeof(string); i++)
{
if(topping == toppings_offered[i])
{
cout << "yes";
}
}
答案 5 :(得分:0)
伪代码:
result = false
for i = 1 to n do
result = result or (input = target[i])
if result then print("At least one matched")
else then print("None matched")
类似的代码可用于查看是否所有匹配或至少一个匹配。
答案 6 :(得分:0)
你的意思是,如果其中一个条件已经满足。尽管可以检查它们,但它们不可能全部实现。
int i = 0;
for (; i < 5; ++i)
if (topping == toppings_offered[i])
break;
if (i < 5)
cout << "yes";
未选中的代码。