将用户输入与文本文件中的字符串列表进行比较

时间:2018-12-04 17:52:48

标签: c#

我有一个文本文件,上面有这些单词的列表

  

笔记本电脑
      激光
      猛男
      山姆
      萨曼莎
      Mulder
      麦克风
      土豚

我想做的是在一个单词中输入用户输入类型,控制台基本上会以我们有您的单词或我们没有您的单词为响应。到目前为止,这是我的代码:

  TextReader文件=新的StreamReader(“ Files / Exercise_Files / Words.txt”);

Console.WriteLine(“欢迎使用FindWord”);
字符串wordInput;
Console.WriteLine(“输入单词,以便我们尝试找到它:”);
wordInput = Console.ReadLine();

字符串sLine = file.ReadToEnd();
如果(String.Compare(wordInput,sLine,true)== 0)
{
    Console.WriteLine(“我们找到了你的话!”);
}
其他
{
    Console.WriteLine(“我们没有找到您的字词”);
}

file.Dispose();
 

我尝试做一些版本来解决这个问题,其中包括添加for-each循环,但这让我很困惑。我不确定100%何时使用for-each循环。我还希望字符串比较不区分大小写,但是无论我输入什么,我现在的代码总是会说找不到单词。

3 个答案:

答案 0 :(得分:1)

将文件加载到数组

string[] words = File.ReadAllLines(path);

然后使用LINQ查找

if (words.Any(w => string.Equals(w, input, StringComparison.InvariantCultureIgnoreCase)))
    // do your thing here

效果ContainsAny

包含速度更快,但是在这种情况下,由于搜索到的集合很小,因此差异将不可见。

public class Program
{

    public static HashSet<string> _hs = new HashSet<String>(Enumerable.Range(1,1000).Select(x=> "Item " + x));
    public static string[] _arr = Enumerable.Range(1,1000).Select(x=> "Item " + x).ToArray();

    public static void Main()
    {

        var sw = new Stopwatch();
        sw.Start();
        bool f;
        for (int i = 1; i < 1001; i++)
        {
            //f = _hs.Contains("Item " + i, StringComparer.OrdinalIgnoreCase);
            f = _arr.Contains("Item " + i, StringComparer.OrdinalIgnoreCase);

        }
        Console.WriteLine(sw.Elapsed);

        sw.Restart();
        for (int i = 1; i < 1001; i++)
        {
            f = _hs.Any(w => string.Equals(w, "Item " + i, StringComparison.InvariantCultureIgnoreCase));
        }
        Console.WriteLine(sw.Elapsed);

    }
}

答案 1 :(得分:1)

您可以使用File.ReadAllLines()方法将文件行读取到数组中,然后使用Linq扩展方法Contains来确定该列表中是否存在某个单词(您可以执行以下操作-不敏感的搜索):

static void Main(string[] args)
{
    var filePath = @"c:\temp\temp.txt";
    var words = File.ReadAllLines(filePath);

    Console.Write("Enter a search term: ");
    var searchTerm = Console.ReadLine();

    if (words.Contains(searchTerm, StringComparer.OrdinalIgnoreCase))
    {
        Console.WriteLine("We have your word!");
    }
    else
    {
        Console.WriteLine("We do not have your word");
    }

    Console.ReadKey();
}

答案 2 :(得分:0)

String.Compare,比较两个字符串。我认为,您可能要使用Contains方法。请参阅下文-

        if (sLine.Contains(wordInput))
        {
            Console.WriteLine("We have found your word!");
        }
        else
        {
            Console.WriteLine("We have not found your word");
        }