C#在字符串中显示重复的字母

时间:2012-03-19 15:41:40

标签: c#

我正在试图弄清楚如何在字符串中显示重复的字母。例如,如果输入的字符串是“red house”,它将显示重复字母“e”,然后它将显示在我创建的标签中。这是一个基本程序,这是我到目前为止所写的内容。任何帮助表示赞赏。

private void button1_Click(object sender, EventArgs e)
    {
        string enteredWord = textBox1.Text;
        char letter;


        for (int index = 0; index < enteredWord.Length; index++) 
        {
            letter = enteredWord[index];

            if (letter == enteredWord[index])
            {
                label1.Text = (letter.ToString());
            }
            else
            { return; 

            }

7 个答案:

答案 0 :(得分:2)

您也可以使用Linq

      var query = from l in enteredWord
                    group l by l into g
                    where g.Count() > 1
                    select new {  letter = g.Key, count = g.Count() };
        foreach (var item in query)
        {
            label1.Text += item.letter + " ";
        }

答案 1 :(得分:1)

这应该做你想要的:

    public static Dictionary<char, int> Count(string input)
    {
        Dictionary<char, int> d = new Dictionary<char, int>();
        foreach (char c in input)
        {
            if (d.Keys.Contains(c))
                d[c]++;
            else
                d.Add(c, 1);
        }
        return d;
    }

    static void Main(string[] args)
    {
        Dictionary<char, int> d = Count("Red House");
        foreach (char c in d.Keys)
        {
            Console.WriteLine("{0}: {1}", c, d[c]);
        }
        Console.ReadKey();
    }

答案 2 :(得分:0)

可以构建HashSet并检查每个字母。我确信有一种更有效的方法,但这应该有效:(未经测试)

string enteredWord = textBox1.Text;
HashSet<char> letters = new HashSet<char>();
foreach(char c in enteredWord)
{
    if (letters.Contains(c))
        label1.Text += c.ToString();
    else
        letters.Add(c);
}

编辑:我想如果这些字母出现3次或更多次,就会打印出重复的字母,但是你明白了。

答案 3 :(得分:0)

我建议使用List并在没有遇到它的情况下添加值,如果已经遇到它,请更新文本框。对于未来的FYI,如果您需要知道确切的计数,也可以使用Dictionary

    List<char> charactersThatHaveOccurred = new List<char>();
    string enteredWord = textBox1.Text;
    foreach(var character in enteredWord)
    {
        if(charactersThatHaveOccurred.Contains(character ))
            label1.Text += character ;
        else
            charactersThatHaveOccurred.Add(character );
    }

答案 4 :(得分:0)

首先想到的是:

List<char> repeats = enteredWord.Where(c1 => enteredWord.Count(c2 => c1 == c2) > 1).Distinct().ToList();

这将返回所有重复字符的List<char>。你可以抓住第一个或任何你想要的东西。

在速度方面可能不是最佳,但它很简单。

答案 5 :(得分:0)

有关解决此问题的更好方法,请参阅其他答案,但我正在尝试查看您尝试执行的操作。 (注意,下面的代码是非常低效的,使用已经看到的字符的HashSet将是我的解决方案。)

也许你错过了内循环?目前您将某些内容(enteredword[index])分配给letter,然后立即进行比较。所以你要将每个字母与自己进行比较。

类似

    for (int index = 0; index < enteredWord.Length; index++) 
    {
        letter = enteredWord[index];

        for (int index2 = 0; index < enteredWord.Length; index++)
        {
            if (index != index2 && letter == enteredWord[index2])
            {
                label1.Text = (letter.ToString());
                return;
            }
        }
    }

答案 6 :(得分:0)

           string s = "red house";   
            foreach (char c in s)
            {
                if (s.IndexOf(c) != s.LastIndexOf(c))
                {
                    label1.Text += c.ToString();
                }
                s.Replace(c.ToString(), string.Empty);
            }