2012-11-21 47 views
-2

它的奇怪,以及我需要從文件中計算字符,並在以後的計算中使用該信息,現在它的奇怪的部分,我想檢查我的程序是否正確countig每個字符的外觀,所以我比較我的結果與例如對於「我」字符我的結果是518 monodevelop有561匹配(大小寫敏感性),所以也許它coudl看起來像我的程序不算好,但我做了測試,並重新編譯它到另一個文件,並再次檢查匹配單聲道開發現在我的結果和monodevelop相匹配的地方。爲什麼會發生?字符計數

這裏是代碼

public Histogram (String nazwa) 
    { 
     histogram = new Dictionary<string,float>(); 
     StringBuilder plik = odczytPliku.odczyt(nazwa); 
     n = 0; 
     foreach(char w in plik.ToString()) 
     { 
      if(!histogram.ContainsKey(new string(w,1))) 
       histogram.Add(new string(w,1),1); 
      else 
       histogram[new string(w,1)]+=1; 
      n++; 
     } 

    } 
+0

沒有你是如何嘗試此的任何代碼,甚至描述,這是不可能回答的問題。 – sybkar

+0

查詢:'wc -mc '。這顯示了字符和字節之間的差異。也許unicode? – tjameson

回答

2

下面的代碼將一個字符串創建人物的直方圖。這假定你正確地傳遞字符串。

public Dictionary<char,int> Histogram(String myString) 
{ 
    Dictionary<char,int> hist = new Dictionary<char,int>() 

    if(!String.IsNullOrEmpty(myString)) 
    { 
     for(int i = 0; i < myString.Length; i++) 
     { 
      char c = myString[i]; 

      if(hist.ContainsKey(c)) 
      { 
       hist[c] = hist[c] + 1; 
      } 
      else 
      { 
       hist.Add(c,1); 
      } 
     } 
    } 

    return hist; 
} 
2
public Dictionary<char, int> Hist(string target) 
    { 
     return target.GroupBy(c => c) 
      .ToDictionary(g => g.Key, g => g.Count()); 
    } 

爲了使它不區分大小寫,只是把它像這樣:

var hist = Hist(target.ToUpperInvariant()); 
+0

我喜歡這種方法!我必須說,我仍然默認以程序的方式思考,但IEnumerable的東西真棒。 – sybkar

+0

同意!一旦你開始思考Linq,就沒有回頭了...... –