首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的子串搜索(暴力破解)

简单的子串搜索(暴力破解)
EN

Stack Overflow用户
提问于 2012-05-17 17:19:07
回答 4查看 1.7K关注 0票数 1

我试图使用暴力技术进行简单的子字符串搜索,但我得到了一个看不到的错误。我是编程新手,所以请记住这一点。问题可能很简单。

代码语言:javascript
复制
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()中)。我不明白为什么。第二,在第一个for循环中(在‘j++’处),我得到一个警告,我的整数'j‘是无法到达的。

请帮帮我!我相信答案很简单,但我就是看不出来。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-17 17:21:45

问题似乎出在你的第二个for循环中。试试这个:

代码语言:javascript
复制
 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参数出现在此字符串中,或者如果value是空字符串(“”),则为True;否则为false。

票数 1
EN

Stack Overflow用户

发布于 2012-05-17 17:43:19

据我所知,你得到的错误是因为如果第一个'for‘循环没有运行一次,那么你就不会命中return语句。这可能不太可能/不可能,但你仍然需要考虑到这一点。这个问题的解决方案是删除末尾的'else‘,这样如果它走得那么远,它肯定会命中'return -1’。

票数 2
EN

Stack Overflow用户

发布于 2012-05-17 17:24:53

不返回的代码路由是当stringLength = patternLength时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10632874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档