[英]Search sentence in text file c#
我想編寫一個程序來搜索句子,但是我的程序只能搜索1個字符,而不是整個句子。 我不想使用Contains
。 那么我應該從這里編輯代碼的哪一部分? 我認為我的循環有問題,但我無法解決
class Readfile
{
public void readf()
{
int j;
int i = 0;
int flag = 0;
Console.WriteLine("Enter sentence : ");
string str = Console.ReadLine();
char[] c1 = str.ToCharArray();
string filename = @"C: \Users\jan31\Desktop\matthew\text.txt";
using (StreamReader sr = new StreamReader(filename))
{
string str2 = sr.ReadToEnd();
char[] fs = str2.ToCharArray();
for (i = 0; i < fs.Length; i++) //loop for file
{
if (flag == c1.Length)
{
Console.WriteLine("found");
break;
}
else
{
for (j = 0; j < c1.Length;) //loop for user string input
{
if (c1[j] == fs[i])
{
flag = flag + 1;
j++;
break;
}
else
{
flag = 0;
j = 0;
break;
}
}
}
}
}
}
}
在第33行中,刪除break
語句並添加i++
。 我驗證了它的工作原理。 問題是,當第一個字符匹配時,您的搜索沒有進展。
我建議您將這篇文章移至https://codereview.stackexchange.com/ ,這似乎是進行代碼審查的更合適的地方。
撇開所有使用“ contains”或RegEx的問題(兩者中的任何一種都會更好,而且可能更快),循環中的問題是,為了使“ i”遞增,您一直將“ j”的值重置為零。 。 找到初始匹配項后,您需要同時增加主題和目標,以確定該匹配項是否適用於下一個字符。
public void readf()
{
int j;
int i;
var flag = 0;
var str = "BCD";
var c1 = str.ToCharArray();
var str2 = "ABBCDEF";
var fs = str2.ToCharArray();
for (i = 0; i < fs.Length; i++) //loop for file
{
if (flag == c1.Length) // All characters in the search string where found.
{
Console.WriteLine("found");
break;
}
for (j = 0; j < c1.Length;) //loop for user string input
{
if (c1[j] == fs[i + j]) // By evaluating i + j, you don't lose your place within the file.
{
flag = flag + 1;
j++;
continue;
}
flag = 0;
break;
}
} // End file loop
Assert.AreEqual(flag, c1.Length);
}
當然,您需要驗證自己的優勢。
是的,您的循環不正確。 請看下面我的解決方案:
for (i = 0; i < fs.Length; i++)
{
if (c1[0] == fs[i])
{
for (var j = 1; j < c1.Length;) //loop for user string input
{
if (c1[j] != fs[i = j])
{
break;
}
}
Console.WriteLine("found");
Console.ReadLine();
return;
}
}
Console.WriteLine("not found");
Console.ReadLine();
因此,如果您想讀取文件並在讀取文件時查找字符串。 可能您的文件很大,無法一次讀取。 這是我的解決方案。
class Readfile
{
public static void readf()
{
Console.WriteLine("Enter sentence : ");
string str = Console.ReadLine();
string filename = @"C: \Users\jan31\Desktop\matthew\text.txt";
Encoding fileEncoding = Encoding.Default;
bool Found = false;
using (Stream s = System.IO.File.OpenRead(filename))
{
int current;
string ReadText = "";
List<Byte> L = new List<Byte>();
do
{
current = s.ReadByte();
if (current != -1)
{
L.Add((Byte)current);
ReadText = fileEncoding.GetString(L.ToArray());
if (ReadText.Length > str.Length)
{
L.RemoveAt(0);
ReadText = fileEncoding.GetString(L.ToArray());
}
if (ReadText.Length == str.Length)
{
if (ReadText == str)
{
//Found it ##############
Found = true;
}
}
}
} while ((current != -1) && !Found);
}
if (!Found) {
//Not Found it ##############
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.