2017-05-08 79 views
0

我想在這裏算在鏈表中重複出現的次數的數量計數的重複出現

,這樣當我的代碼會顯示(3,2 C,1)如果我餵養它 列表A-> A-> A-> C-> C->一

 class Node 
     { 
      public: 

      char letter; 
      Node * next; 
      Node(); 
      Node(char); 
     }; 

使用下面的功能我設法算出現而不是我所期望的方式。

 int Count(Node* h, char searchFor) 
     { 
      int count=0; 
      while(h) 
      { 
       if(h->letter==searchFor) 
        count++; 
       h=h->next; 
      } 

      return count; 
     } 

在主函數

 cout<<"a "<<Count(h, 'a')<<" c "<<Count(h,'c')<<"a "<<Count(h, 'a')<<endl; 

將輸出(一個3,C 2,3)不得(a 3,C 2,1)

如何傳遞的頭功能,以便它將返回具有類似字符的所有節點的計數?

+7

你希望'伯爵的第二個呼叫(H,「一」)怎麼辦'來給出不同的答案第一呼叫?它從同一個地方開始,看着相同的節點。 –

+0

相關:請記住函數參數不需要按任何特定順序進行全面評估。由於'operator <<'的實現實際上是一個函數,所以三個'Count()'調用可以以任何順序發生。*目前這不是你的問題,但是你的修復可能不會考慮這種可能性。 – cdhowie

+0

您需要添加邏輯,以便計數只會返回大於零的答案,前提是您至少得到2個與searchFor相同的連續字符。 – HughB

回答

0

看起來你不想指望所有的字符,試試這個:

int Count(Node* h, char searchFor) 
     { 
      int count=0; 
      while(h) 
      { 
       if(h->letter==searchFor) { 
        ++count; 
       } 
       else if(count > 0) { 
        break; 
       } 
       h=h->next; 
      } 

      return count; 
     }