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