2016-10-10 54 views
-4

有人可以引導我或將其轉換爲三元運算符形式嗎?我使用堆棧來創建一個文本編輯器,它將檢查代碼中的括號,但我只需要使用三元運算符來縮短此代碼的幫助。如何將這個特定的「if/else」塊轉換爲三元運算符?

  if(s.at(i)==x.at(j)) 
      { 
       list.push_back(s.at(i)); 
      } 

      if(s.at(i)==y.at(j)) 
      { 
       if(!list.empty()) 
       { 

        if(list.back()=='(' && s.at(i)==')') 
        { 
         v=1; 
         list.pop_back(); 
        } 
        else if(list.back()=='{' && s.at(i)=='}') 
        { 
         v=1; 
         list.pop_back(); 
        } 
        else if(list.back()=='[' && s.at(i)==']') 
        { 
         v=1; 
         list.pop_back(); 
        } 

        else 
        { 
         error_position=i+1; 
        } 
       } 
       else 
       { 
        error_position=i+1; 
        v=0; 
       } 
     } 
+5

如果我是你,我會避免縮短這個代碼與有條件的運營商,因爲它剛剛讓一切更難理解。清除代碼>>>>>>>>短代碼。 – TartanLlama

+4

你爲什麼要這麼做?沒有任何收益2.會使代碼難以閱讀。 –

+0

我真的沒有看到這一點,所以SO不是免費的代碼服務/請做我的作業網站。 – George

回答

2

你的代碼應該是明確的閱讀和這裏的任何介紹三元操作將使其不太清楚,不是更好,而且它也不會覺得要提高性能。

三元運算符通常不應該有副作用,應該簡單地選擇使用哪個值。 min()可以很好地用於三元運算,即(a<b)?a:b

在代碼中我沒有看到可以通過三元運算符更好地表達的塊。我通常不會在同一個塊中多次使用()和()中的多個時間。因此,計算s.at(i)一次,將其放入一個有意義的變量中並使用它。

3

三元運算符用於選擇之間的值,而不是操作。

如果你有一個條件只能分配給同一個變量,那麼重寫是有意義的。
例如,

int x = 0; 
if (something) 
{ 
    x = 12; 
} 
else 
{ 
    x = 34; 
} 

是更好,因爲

int x = something ? 12 : 34; 

使用在你的代碼,操作員將不能使它更短,只有更令人費解且無法讀取。
目前還不清楚它的結果是什麼。
唯一合理的候選人是分配給v的值,但是您沒有在每個分支中分配v,所以它已經結束。

顯而易見的縮寫是將您的三個條件與||結合起來,但更好的方法可能是完全抽象出測試,例如,

bool matching_brackets(char p1, char p2) 
{ 
    return (p1 == '(' && p2 == ')') 
     || (p1 == '{' && p2 == '}') 
     || (p1 == '[' && p2 == ']'); 
} 

// ... 
if(s.at(i)==y.at(j)) 
{ 
    if (list.empty()) 
    { 
     v = 0; 
     error_position = i + 1; 
    } 
    else if (matching_brackets(list.back(), s.at(i))) 
    { 
     v = 1; 
     list.pop_back(); 
    } 
    else 
    { 
     error_position = i + 1; 
    }    
} 
// ...