Javascript js中克隆的substring()函数出错

Javascript js中克隆的substring()函数出错,javascript,string,substring,Javascript,String,Substring,我试图在js中创建一个函数,用于检查主字符串中是否存在子字符串。例如:-main=111010和substring=011应该返回false,因为主字符串中不存在substring,但我的代码返回true。下面是代码 var string = "111010", substr = "011"; var found=false; outter:for(var i=0;i<string.length;i++){ if(string.charAt(i)==substr.ch

我试图在js中创建一个函数,用于检查主字符串中是否存在子字符串。例如:-main=111010和substring=011应该返回false,因为主字符串中不存在substring,但我的代码返回true。下面是代码

var string = "111010",
substr = "011";     

var found=false;

outter:for(var i=0;i<string.length;i++){
    if(string.charAt(i)==substr.charAt(0)){                   
        var k=i+1;
        inner:for(j=1;j<substr.length;j++){
            if(string.charAt(k++)==substr.charAt(j)){
                found=true;
                continue inner;
            }else{
              continue outter;
            }
        }
    }
}

if(found!=false){
    console.log("y")
}else{
    console.log("n");
}
var string=“111010”,
substr=“011”;
var=false;

outter:for(var i=0;i这是检查以下各项的代码:

var string = "111010", substr = "011";
var test = string.indexOf(substr);

if (test >= 0) { 
    alert('yes');
} else {
    alert('no');
}

您忘记重新初始化找到的
变量

var string = "111010",
substr = "0110";     

var found=false;

for(var i=0;i<string.length;i++){
    if(string.charAt(i)==substr.charAt(0)){                   
        var k=i+1;
        for(j=1; j < substr.length;j ++)
            if(string.charAt(k++)==substr.charAt(j)){
                found=true;
            }else{
               found = false; // <<--this
               break;
            }
        if(found) break;   
    }
}

if(found!=false){
    console.log("y")
}else{
    console.log("n");
}
  • 为什么要分别对待第一个字母
  • 不要使用标签
  • 不要搜索匹配项,搜索不匹配的字母,如果找不到,则字符串匹配
  • 不要使用不必要的索引变量(如k),针串上字母的位置为
    j
    ,而在干草串中字母的位置为
    i+j

为什么不直接使用
string.indexOf(substr)!=-1
?是的,我可以使用language提供的api,但我想自己使用,这样我就可以知道它是如何工作的。我知道如何使用indexOf函数解决这个问题,但我被要求在不使用任何api的情况下实现相同的功能。让我检查一下,现在即使存在子字符串,它也会输出false。请尝试使用main=111010,sub=101,因为在找到匹配项时循环没有停止。请参阅我的编辑。它工作了,仍然没有输出单个数字的true(main=111010,substring=1),但我找到了一个修复方法。谢谢。:)请再次查看我的更新,以获得代码的更清晰版本。
var found = false;

for (var i = 0; i < string.length; i++) { // starting position
    found = true; // All letters match,  prove the opposite

    for (j = 0; j < substr.length; j++) { // Compare the given string with the string starting at i
        if (string.charAt(i + j) != substr.charAt(j)) { // If one letter does not match, stop searching
            found = false;
            break;
        }       
    }

    if (found) break;
}