我正在试图弄清楚如何在字符串中显示重复的字母。例如,如果输入的字符串是“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;
}
答案 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);
}