2016-08-14 2 views
-2

Цикл q не увеличивается. Если удалить разрыв, он станет бесконечным циклом. Он просто не работает с q. Петля k отлично работает. Я был бы очень полезен, если бы вы также могли объяснить, почему это происходит. Пожалуйста помоги !!Как запустить цикл q (INCREMENT Q)?

#include <iostream> 
#include <vector> 
#include <string> 
#include <algorithm> 

using namespace::std; 

int main() { 

string input; 
getline(cin, input) ; 
vector<char> myVector(input.begin(), input.end()); 
vector<char> myVector2(input.begin(), input.end()); 
sort(myVector2.begin(), myVector2.end()); 

if(myVector2 == myVector){ 
    cout << "rank :1"; 
} 

else{ 
    int i; 
    for (i = 0; i < myVector2.size(); i++){ 
     cout << myVector2[i]; 
    } 

    cout << endl; 

    int q = 0, k = 0, value = 1, w = 1; 
    while(q < myVector.size()){ 
     while(k < myVector.size()){ 
      while(myVector2[k] != myVector[q]){ 
       while(w < myVector2.size()){ 
        value = value * w ; 
        w++; 
       } 
       k++; 
      } 

      cout << value*k; 
      cout << endl; 

      myVector2.erase(myVector2.begin()+k); 
       for(int j = 0; j< myVector2.size(); j++){ 
        cout << myVector2[j]; 
      } 
      break; 
     } 
     q++; 
     break; 
    } 
} 
return 0; 
} 
+0

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

+0

У вас есть ограниченный доступ с 'while (myVector2 [k]! = MyVector [q]) {' ... – Jarod42

+0

что не доступно? –

ответ

0

Есть 2 основные проблемы с вашим кодом:

Проблема 1:

Почему вы разорвать цикл? Точное определение разрыва: The break statement ends execution of the nearest enclosing loop or conditional statement in which it appears. Control passes to the statement that follows the end of the statement, if any.

Вы увеличиваете q, а затем разрываете while-loop. Ваш код выглядит следующим образом:

 while(q < myVector.size()){ 
      //code here 
      q++; 
      break; // <------------ This will exit the while loop on the first iteration 
     } 

Как следствие, внешний цикл никогда не выполняется.

Задача 2:

Этот цикл будет бесконечный цикл тогда и только тогда, когда myVector2 и myVector не имеют общих элементов. В этом случае, к будет увеличиваться бесконечное число раз, потому что к никогда не проверяется на k < myVector2.size?

 while(myVector2[k] != myVector[q]){ 
      while(w < myVector2.size()){ 
       value = value * w ; 
       w++; 
      } 
      k++; 
     } 

Чтобы устранить проблему изменения while-loop

 while(k < myVector2.size() && myVector2[k] != myVector[q]){ 
      while(w < myVector2.size()){ 
       value = value * w ; 
       w++; 
      } 
      k++; 
     } 

edit1: logical and statements вычисляются слева направо. Правая часть логической и будет выполняться только в том случае, если выполняется условие k < myVector2.size()), например, предотвращение доступа за пределы.

Thanks Jarod42 для заметок.

+0

Спасибо человеку !! вы отлично поработали –

+0

@DewangGupta Я рад, что ваша проблема решена! – KostasRim

+0

@ Jarod42 WOW, как я пропустил это, такой замечательный человек. Изменить, сделать. Спасибо за наблюдение. – KostasRim

Смежные вопросы