簡體   English   中英

將字符串與字符串數組匹配

[英]Matching a string against an array of strings

我有四個要與輸入字符串匹配的操作數組。

我的嘗試:

string[] operations = {"add","sub","mul","div"};
string rawInput = Console.ReadLine();
string[] inputs = rawInput.Split(delims,StringSplitOptions.RemoveEmptyEntries);
firstInput = inputs[0].Trim();

foreach (string operation in operations) 
{
    if (firstInput.Contains(operation))
        Console.WriteLine("Valid operation: {0}",operation);
}

如我所料,如果我輸入add,sub,mul或div,這將打印Valid operation

為了輸出無效輸入的消息,我添加了如下條件:

else
{
    Console.WriteLine("Invalid operation: {0}", firstInput);
    break;
}

如果我現在輸入sub ,我得到:

Invalid operation: sub

如果我刪除break語句並輸入sub

Invalid operation: sub
Valid operation: sub
Invalid operation: sub
Invalid operation: sub

如何修改邏輯,以便只收到一次正確的消息?

查看第一個輸入是否在您的有效操作列表中,而不是相反(使用LINQ):

if (operations.Contains(firstInput))
{
  Console.WriteLine("Valid operation: {0}", firstInput);
}
else
{
  Console.WriteLine("Invalid operation: {0}", firstInput);
}

如果已經遍歷列表,那么這是一種選擇:

bool foundValidOP = false;
foreach (string operation in operations) 
{
    if (firstInput.Equals(operation, StringComparison.InvariantCultureIgnoreCase))
    {
        foundValidOP = true;
        break;
    }
}

if (foundValidOP)
{
  Console.WriteLine("Valid operation: {0}", firstInput);
}
else
{
  Console.WriteLine("Invalid operation: {0}", firstInput);
}

您的foreach循環會遍歷operations每個條目,因此您的邏輯是不正確的,因為如果輸入與operations中的第一個元素(即"add" )不匹配,則它將超出循環。 如果發現有效操作,您確實想跳出循環,否則繼續掃描。 這是一些示例代碼:

bool validOperation = false;
foreach (string operation in operations) 
{
    if (firstInput.Contains(operation))
    {
        Console.WriteLine("Valid operation: {0}",operation);
        validOperation = true;
        break;
    }
}
if (!validOperation)
{
    Console.WriteLine("Invalid operation: {0}", firstInput);
}

您可以嘗試以下方法:

string[] operations = { "add", "sub", "mul", "div" };
var firstInput = "sudb";

var x = operations.SingleOrDefault(o => o == firstInput);

if (x != null)
    Console.WriteLine("Valid:" + x);
else
    Console.WriteLine("Invalid:" + firstInput);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM