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

时间:2016-11-08 18:15:42

标签: c# visual-studio

这是我的程序,但我想如果用户输入一个名称,程序将首先看到该名称是否已保存在数组中。这是我试过的,我试图使用contains.but它失败了,它没有任何错误。 如果不是那么说那段代码意味着什么(我只是一个初学者),你能否给我一个简单的解决方案。

   {
        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欧元。

扩展名:如果数组中已存在好友的名字,则该名称不会再次添加。

3 个答案:

答案 0 :(得分:1)

最好使用像Hashset<string>这样的数据结构。 Hashsets通过迭代列表对O(1)进行O(1)查找。

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

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();
}

答案 1 :(得分:0)

也许您可以使用字符串列表执行此操作,然后,您可以使用linQ在列表中进行搜索:

List<string> names = new List<string>();

if (names.Any(x => x.Contains(naam))
// stuff
else
names.Add(naam);

答案 2 :(得分:0)

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();