简单的子字符串搜索(暴力破解)
本文关键字:破解 搜索 字符串 简单 | 更新日期: 2023-09-27 18:34:22
我正在尝试使用蛮力技术进行简单的子字符串搜索,但我得到一个我看不到的错误。我对编程很陌生,所以请记住这一点。问题可能很简单。
using System;
using System.Collections;
using System.Collections.Generic;
namespace SubstringSearch
{
class Program
{
static void Main(string[] args)
{
Console.Write("Please enter some letters: ");
string sequence = Console.ReadLine();
Console.Write("Enter the sequence you want to search for: ");
string pattern = Console.ReadLine();
Console.WriteLine(Search(pattern, pattern.Length, sequence, sequence.Length));
Console.ReadLine();
}
public static int Search(string pattern, int patternLength, string sequence, int stringLength)
{
int i;
int j;
if (stringLength >= patternLength)
{
for (j = 0; j <= (stringLength - patternLength); j++)
{
for (i = 0; i < patternLength && pattern[i] == sequence[i + j]; i++);
if (i >= patternLength)
return j;
else
return -1;
}
}
else
return -1;
}
}
}
所以我收到一个错误和一个警告。首先,它告诉我并非所有代码路径都返回一个值(在 Search() 中)。我不明白为什么。其次,我收到一条警告,指出我的整数"j"在第一个 for 循环中无法访问(在"j++"处)。
请帮忙!我相信答案很简单,但我就是看不出来。
据我所知,你得到的错误是因为如果第一个"for"循环甚至没有运行一次,那么你就不会点击返回语句。这可能不太可能/不可能,但您仍然必须考虑它。对此的解决方案是删除末尾的"else",这样如果它走得那么远,它肯定会击中"返回 -1"。
问题似乎出在您的第二个 for 循环中。试试这个:
if (stringLength >= patternLength)
{
for (j = 0; j <= (stringLength - patternLength); j++)
{
for (i = 0; i < patternLength && pattern[i] == sequence[i + j]; i++)
{
if (i >= patternLength)
return j;
}
}
}
return -1;
这应该删除所有警告和错误并进行编译。为什么不使用.Contains()
方法?
包含
如果 value 参数出现在此字符串中,则为 True,或者如果值为空字符串 (");否则,为假。
no return 的代码路由是 stringLength = patternLength。
替换
Console.WriteLine(Search(pattern, pattern.Length, sequence, sequence.Length));
跟
sequence.IndexOf(pattern);
并摆脱您的搜索功能。您正在重写(糟糕的)框架中可用的内容。