检查循环中出现的任何条件是否已满足c ++

时间:2011-07-31 21:10:49

标签: c++ for-loop

如何使用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";

7 个答案:

答案 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";

未选中的代码。