2014-05-09 70 views
0

我在C#中創建了一個程序,它通過一個字符串並計算字符的頻率。處理換行符

基本上我有2類

class Node 
    { 
     private char character; 
     private float frequency; 
     public void increment();//increments frequency 
    } 

    class FreqTbl 
    { 
     private List<Node> nodes; 
     public void buildTable(char Symbol) 
     { 
      bool found = false; 


      foreach (var node in nodes.Where(n => n.getSymbol() == Symbol)) 
      { 
       node.increment(); 

       found = true; 
      } 

      if(found == false) 
      { 
       newNode(Symbol); 
      } 
     } 
    } 

通過文本框的GUI,該程序通過一個焦炭引入FreqTbl.buildTable,其通過節點字段進行搜索。而所有其他字符處理沒有問題,換行輸出

說出現兩次,如果文本框具有輸入

鏈表

紅黑樹

的結果輸出將是

l:3

I:2

N:1

K:2

E:4-

d:2

:3

S:1

t:2

\ n

:1

\ n

:1

R:2

B:1

一個:1

Ç :1

\ n代表換行符。無論如何要解決這個問題,只有1個換行符出現在輸出中?

+0

看來你有兩個節點,其都代表\ n。消除其中一個。或(不太可能),你可能只是在你的輸出過程中的錯誤... – elgonzo

+0

你爲什麼不修剪輸入字符串的結束,以確保你不要尾隨'\ N' – Hassan

+1

有丟失了大量的代碼從這個例子:'Node.increment()'未被實現並且'FreqTbl。節點'是無法輸出的,沒有'newNode'或'getSymbol'方法定義,這只是開始...仍然,看看我是否能用最少的編輯重現... –

回答

1

每個字符傳遞到FreqTbl.buildTable之前,你必須選擇處理您的輸入:

string strInput = textBox1.Text.TrimEnd('\r', '\n'); 

或者

string strInput = textBox1.Text.TrimEnd(Environment.NewLine.ToCharArray());