C ++ поиск и выполнение метода всякий раз, когда символ замечен - PullRequest
0 голосов
/ 02 марта 2012

Ниже у меня есть код и в последнем операторе if я хочу найти букву B . Тем не менее, я хочу искать с позиции, где P был найден и увеличивать, пока не найдет B , а затем, когда он находит B Я хочу выполнить метод .

Я использовал комментарий в своем коде, чтобы показать вам, куда код пойдет.

Итак, шаги

  1. Найдите положение 'P'
  2. Увеличивать с позиции 'P', пока вы не найдете 'B' и метод выполнения
  3. Продолжайте увеличивать до тех пор, пока не достигнете конца вектора, и если вы снова увидите букву 'B', повторите тот же метод снова и так далее

Код, который у меня пока есть:

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 голосов
/ 02 марта 2012

Итак, поместите вторую логику внутри цикла, который выполняется, пока не достигнет конца 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");
 }

Обратите внимание, что я использую итераторы, а не индексы.

Кроме того, ваши отступы ужасны.

РЕДАКТИРОВАТЬ: я вижу, вы изменили свой код, так как я ответил на вопрос. Логика остается прежней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...