所以我有一个文本文件,我想搜索一个数字,如果找到,则输出一个消息编号,如果没有,则找不到。
目前我已将文本文件读入字符串并询问用户他们想要搜索的号码。我坚持的部分是线性搜索字符串的代码。我想查找一个字符串,因为我将使用的其他文件可能包含单词。
代码到目前为止:
public static void search() // Search for values
{
Console.WriteLine("Enter 1 to search through days");
int operation = Convert.ToInt32(Console.ReadLine());
if (operation == 1)
{
String[] myArray = File.ReadAllLines("Data1/Day_1.txt");
Console.WriteLine("Enter number to search");
String myString = Console.ReadLine();
}
}
我看过线性搜索的一些代码,但不知道如何将它正确应用到我的示例中。我理解它是如何工作的,但问题是以正确的顺序获取代码。在c#中编码不太好。任何帮助将非常感激。感谢
通用线性搜索代码:
static int Search(string[] list, string elementSought)
{
bool found = false;
int max = list.Length - 1;
int currentElement = 0;
do
{
if (list[currentElement] == elementSought)
{
found = true;
}
else
{
currentElement = currentElement + 1;
}
} while (!(found == true || currentElement > max));
if (found == true)
{
return currentElement;
}
else
{
return -1;
}
}
更新
public static void search() // Search for values
{
Console.WriteLine("1=Day 2=Depth");
int operation = Convert.ToInt32(Console.ReadLine());
if (operation == 1)
{
String[] myArray = File.ReadAllLines("Data1/Day_1.txt");
}
else if (operation == 2)
{
String[] myArray = File.ReadAllLines("Data1/Months_1.txt");
}
Console.WriteLine("Enter number to search");
String myString = Console.ReadLine();
int i = 0;
int j = 0;
var regex = new Regex(myString);
foreach (string array in myArray)
{
if (regex.IsMatch(array))
{
i++;
}
else if (regex.IsMatch(array))
{
j++;
}
}
if (i > 0)
{
Console.WriteLine("Found match! - {1} Appeared {0} time(s)",i,myString);
}
else if(j == 0)
{
Console.WriteLine("No Match for {0} in Data", myString);
}
Console.ReadLine();
}
如何更改它,以便我选择第二个文件作为我的数组使用?
答案 0 :(得分:1)
你的任务过于复杂,只需使用for循环进行线性搜索或使用Linq
:
static int Search(string[] list, string elementSought)
{
return list.ToList().FindIndex(s => s == elementSought);
}
答案 1 :(得分:1)
您可以使用Array.IndexOf。如果在数组中找不到该项,则返回-1,否则返回第一次出现的索引。
示例(控制台应用)
static void Main(string[] args)
{
string[] list = {"xxx", "yyy", "aaa", "bbb"};
var found = Search(list, "gggg");
}
static bool Search(string[] list, string elementSought)
{
var index = Array.IndexOf(list, elementSought);
var found = index != -1;
return found;
}
答案 2 :(得分:0)
您需要循环遍历字符串数组以搜索匹配项。使用正则表达式检查匹配。
Console.WriteLine("Enter number to search");
String myString = Console.ReadLine();
var regex = new Regex(myString);
foreach (string array in myArray)
if (regex.IsMatch(array))
Console.WriteLine("Found match!");