C#。如何归还char?

时间:2011-03-12 21:05:59

标签: c# string function search character

我需要编写一个函数来返回文本中出现2次或更多次的所有字符。没有功能时使用它没有任何问题(例如点击按钮)。这就是我的方式:

for (int i = 0; i < alph.Length; i++) // alph is my text(string)
        {
            int count = allText.Split(alphCh[i]).Length - 1; 
            if (count >= 2)                   
                listView2.Items.Add(alphCh[i].ToString());                
        }

这就是我写函数的方式:

public char[] chars2(string text)
    {
        char[] allChar = text.ToCharArray();
        string allText = text.ToString();
        string allTextL = text.ToLower();
        string alph = "abcdefghijklmnopqrstuvwxyz";
        char[] alphCh = alph.ToCharArray();  
        char[] result = new char[0];
        int allcount = 0;

        for (int i = 0; i < alph.Length; i++)
        {
            int count = allText.Split(alphCh[i]).Length - 1;
            if (count >= 2)
            {
                allcount++;
                result = new char[allcount];
                for (int j = 0; j < allcount; j++)
                {
                    result[j] = alphCh[i];
                    return result;
                }
            }               
        }  
        return result;            
    }

但是函数只返回在文本中出现2次或更多次的第一个字符。例如,我写abcbca - func返回a,我想func返回a,b,c,将其写入ListView例如。我做错了什么?拜托,我非常需要你的帮助。感谢名单。

5 个答案:

答案 0 :(得分:4)

如果你有C#3.0或更新版本,你可以使用LINQ:

char[] result = text
    .GroupBy(x => x)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key)
    .ToArray();

答案 1 :(得分:2)

Linq可以简化。这符合要求吗?

"aabbccpoiu".ToCharArray()
    .GroupBy(c => c)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key)

返回a,b和c。

答案 2 :(得分:1)

改为返回一个List,并像在listview中一样在函数内部使用它;只需使用List<char> rVal = new List<char>();,然后使用rVal.Add(character)(如果尚未添加

同时删除循环内的返回:

答案 3 :(得分:1)

只是一个建议=

public List<char> getMoreThanTwice(string text) {

char[] characters = text.toCharArray();
Dictionary<char, int> chars = new Dictionary<char, int>();
List<char> morethantwice = new List<char>();

for (int i=0;i<characters.Length;i++) {
  if (chars.containsKey(characters[i])) {
   chars[characters[i]] = chars[characters[i]] + 1;
  }else{
   chars.Add(characters[i], 1);
   }
}

foreach (KeyValuePair keypair in chars) {
   if (keypair.Value >= 2)  {
     morethantwice.Add(keypair.Key);
   }
 }

return morethantwice;
}

答案 4 :(得分:0)

第一个return result;会在找到第一个结果时直接返回。