Работа со строками в C ++ 11 как выполнить условия? - PullRequest
1 голос
/ 04 августа 2020

Учитывая строку, я хочу проверить, удовлетворяет ли она следующим условиям:

  1. она состоит только из маленькой буквы, больших букв, цифр, [ или ] или ;
  2. Если появляется [], они должны быть правильно размещены, другими словами, после каждого [ идет ], а перед каждым ] есть [

Например, это разрешено: [x1[x3]] Хотя это не так: [x1]]x2[

если появляется ;, оно должно быть между []

Например, это допустимо: [;;;], [a;bb] Хотя это не так: x1[];y "

Я закончил 1, но застрял на 2 и 3, есть помощь?

Ответы [ 3 ]

6 голосов
/ 04 августа 2020

Просто пройдитесь по строке по одному символу слева направо (для этого подходит ранжирование) и отслеживайте уровень вложенности (количество несовпадающих [).

Правило 1 : очевидный тест на персонаже

Правило 2: если [ увеличивает уровень вложенности, если ] уменьшает уровень вложенности. Если уровень становится отрицательным, это ошибка. Если он не возвращается к нулю в конце строки, это ошибка.

Правило 3: если ;, то уровень вложенности должен быть не менее 1, если он (меньше или) равен до нуля, что является ошибкой.

1 голос
/ 04 августа 2020

Ну, эта идея похожа на @Jasmeet, но со всеми условиями, как @BenVoidt говорит:

bool check(string x){
    int bracketSence=0;
    for(int i=0; i < x.size(); ++i){
        //First Condition
        if(islower(x[i]) || isupper(x[i]) || (x[i] >= '0' && x[i]<= '9') ||
           x[i] == '[' || x[i] == ']' || x[i] == ';'){
               //Second and Third Condition
               if(x[i] == '[')      ++bracketSence;
               else if(x[i] == ']') --bracketSence;
               else if(x[i] == ';' && bracketSence<1) return false;
               if(bracketSence < 0) return false;
           }
        else return false;
    }
    return bracketSence == 0;
}
1 голос
/ 04 августа 2020

Чтобы отслеживать [ и ], вы можете отслеживать все [, встреченные до сих пор, для которых нет соответствия ]. Вы также можете проверить, лежит ли ; в том же logi c.

int countBrackets = 0;

for(int i=0;i<strlen(str);i++)
{
   if(str[i] == '[')
   {
      countBrackets++;
   }
   else if(str[i] == ']')
   {
      if(countBrackets == 0) return false;
      else countBrackets--;
   }
   else if(str[i] == ';')
   {
      if(countBrackets == 0) return false;
   }
}

if(countBrackets > 0) return false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...