验证是否输入了2个相似的名称

本文关键字:相似 2个 是否 输入 验证 | 更新日期: 2023-09-27 18:17:03

这是我的程序,但我想如果用户输入一个名称,程序将首先看到该名称是否未被保存在数组中。这是我尝试过的,我尝试过使用容器。但是失败了,它没有给出任何错误。你能给我一个简单的解决方案,如果没有,然后说什么代码的意思(我只是一个初学者)。

   {
        string naam;           
        Console.Write("geef je naam: ");
         naam = Convert.ToString(Console.ReadLine());
        string[] array = new string[] {naam};
        while (naam != "")
        {
            Console.Write("geef je naam: ");
            naam = Convert.ToString(Console.ReadLine());
           //array[naam.Length] = Convert.ToString(Console.ReadLine());
        }
        if (array.Contains(naam))
        {
            Console.Write("naam is al toegevoegd");
        }
        while (naam == " ")
        { 
            break;
        }

        Console.ReadLine();
    }

这是我做的练习中的问题:你写一个程序请求朋友的名字。

每次添加好友时,检查该好友的名称是否。如果没有,那就停止重复朋友。

还记录了所有朋友参加聚会的费用。

聚会的价格=每位朋友10欧元。

扩展:如果一个朋友的名字已经存在于数组中,那么这个名字不会在第二次添加。

验证是否输入了2个相似的名称

最好使用Hashset<string>这样的数据结构。哈希集的查找次数为0(1)次,而通过迭代列表的方法应该为O(n)次。

您可能希望在将其放入哈希集之前对名称进行规范化(例如,如果您不希望它区分大小写并删除双间距等)。

var names = new HashSet<string>();
names.Add(NormaliseName("Tom"));
names.Add(NormaliseName("Peter"));
names.Add(NormaliseName("John"));
var normalisedTestName = NormaliseName("Tony");
if (names.Contains(normalisedTestName ))
{
    // Already exists
}
else
{
    // Doesn't exist, add to hashset
    names.Add(normalisedTestName);
}
private static string NormaliseName(string name){
    return name.ToLower().Trim();
}

也许你可以用一个字符串列表来做这个,然后你可以使用linQ在你的列表中搜索:

List<string> names = new List<string>();
if (names.Any(x => x.Contains(naam))
// stuff
else
names.Add(naam);
var namen = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
bool gedaan = false;
while (!gedaan)
{
    Console.Write("geef je naam: ");
    var naam = Console.ReadLine().Trim();
    gedaan = naam == "";
    if (!gedaan)
    {
        if (!namen.Add(naam))
        {
            Console.WriteLine("naam is al toegevoegd");
        }
    }
};
Console.WriteLine($"totale party kosten: {namen.Count * 10} euro");
Console.ReadLine();