发现角色时的C ++搜索和执行方法

时间:2012-03-01 20:31:07

标签: c++ if-statement for-loop while-loop

下面我有一些代码,在最后的if语句中我想搜索字母 B 。但是,我想从找到 P 的位置搜索并增加,直到找到 B ,然后当找到 B 时,我想要执行方法。

我在代码中使用了一条评论来向您展示代码的去向。

所以步骤是

  1. 找到'P'的位置
  2. 从“P”的位置开始递增,直到找到“B”和执行方法
  3. 继续递增againg直到你到达向量的末尾,如果你再次看到'B'再次执行相同的方法,等等
  4. 我到目前为止的代码是:

    std::vector<std::string> order;
    std::vector<std::string>::iterator it;
    std::vector<std::string> tempOrder;
    
    order.push_back("V"); //V
    order.push_back("I");//F
    order.push_back("F");//I
    order.push_back("N");//O
    order.push_back("D");//O
    order.push_back("W");//O
    order.push_back("O");//O
    order.push_back("P");//O
    order.push_back("Y");//O
    order.push_back("B");//O
    order.push_back("L");//O
    order.push_back("B");//O
    order.push_back("R");//O
    order.push_back("X");//O
    
    if(order.front() == "V")
    {
        it = find(order.begin(), order.end(), "I");
        ++it;
        std::string o = *it;
        DCS_LOG_DEBUG("NEXT 0 " << o);
        DCS_LOG_DEBUG("NEXT " << *it);
    
    
        int i = find(order.begin(), order.end(), "N") - order.begin();
        int pos = i;
    
        DCS_LOG_DEBUG("POS " << pos);
    
        for(int i1 = 0; i1 < pos; i1++)
        {
            //DCS_LOG_DEBUG("IN LINE " << order[i1]);
    
            if(order[i1] == "D" || order[i1] == "W" || order[i1] == "O" || order[i1] == "P")
            {
                DCS_LOG_DEBUG("It matches one of the above incorrect");
    
                break;
            }
            else
            {
                DCS_LOG_DEBUG("OK");
                break;
            }
        }
    
        std::vector<std::string>secondOrder;
        copy(order.begin() +  pos + 1, order.end(), std::back_inserter(secondOrder));
    
    
        if(find(secondOrder.begin(), secondOrder.end(),"P")- secondOrder.begin())
        {
            DCS_LOG_DEBUG("Found");
            int i1 = find(order.begin(), order.end(), "P") - order.begin();
    
            //HERE IS WHERE THE CODE WILL GO
    
        }
        else
        {
            DCS_LOG_DEBUG("NOT FOUND");
        }
    
    }
    

1 个答案:

答案 0 :(得分:0)

所以把第二个逻辑放在一个循环中,直到它到达vector的末尾:

 if( (it = find(secondOrder.begin(), secondOrder.end(),"P") ) != secondOrder.end() )
 {
      DCS_LOG_DEBUG("Found");
      it1 = order.begin();
      while ( (it1 = find(it1, order.end(), "B")) != order.end() )
      {
         //code here
         //*it1 is the element you're looking for
      }
 }
 else
 {
      DCS_LOG_DEBUG("NOT FOUND");
 }

请注意,我使用的是迭代器,而不是索引。

另外,你的缩进很糟糕。

编辑:自从我回答问题后,我发现你改变了代码。逻辑保持不变。