weixin_44032992
小杨加油
2020-03-08 17:12
采纳率: 0%
浏览 242

用java写的模式匹配,运行结果一直是错的,不知道问题出在哪,球球了

不知道哪里不对,结果一直是错的

public class BF{
 public static int bf_cmp(String S, String T){
  int m=T.length();//T长
  int n=S.length();//S长
  int i,j;//记录主串下一次比较起始位置
  for(i=0; i<m-n; i++) {
  j=0;
  while(j<n && T.charAt(i+j)==S.charAt(j)) {//查找满足条件的
   j++;
  }
  if(j==n) {
   return i; //返回模式在文本中的开始位置
  }
  }
  return -1; 
 }
 public static void main(String[] args) {
  int pos=0;
  pos = bf_cmp("abcdefgh","fgh");
  if(pos != -1)
  System.out.print("T在S中第:"+pos+"个位置");
  else
  System.out.print("不匹配");  
 }
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • hjs218
    Json-Huang 2020-03-08 19:36

    试试下面的看看

    public static int bf_cmp(String S, String T) {
            int m=S.length();//T长
            int n=T.length();//S长
            int i,j;//记录主串下一次比较起始位置
            for(i=0; i<m; i++) {
                j=0;
                while(j<n && S.charAt(i)==T.charAt(j)) {//查找满足条件的
                    j++;
                    i++;
                }
                if(j==n) {
                    return i-j; //返回模式在文本中的开始位置
                }
            }
            return -1;
        }
    
    点赞 评论
  • espen_tian
    「已注销」 2020-03-09 23:55

    具体方法没有啥问题,就是你的for循环条件不对,漏掉了最后一次匹配,而你main方法中写的例子刚好又是最后一次才匹配成功,所有结果不对,你试试把你要查找的字符串不要放在被查找的字符串末尾再看看。所以,把for循环的条件改为i <= m-n 或者 i < m-n+1都可以
    当然,其实你这么改了也还是不对,因为你在main方法中把S和T的位置写反了,根据方法的逻辑,明显是在T中找S出现的位置,你搞反了o(╯□╰)o

    点赞 评论

相关推荐