我只想查找字符串中是否存在子字符串,而不使用任何库函数。我知道它非常简单,我以前用C,C ++和Java完成了这个。但是,我没有得到JavaScript的输出。我使用以下代码:
<html>
<body>
<script type="text/javascript">
var j,i;
var str=window.prompt("Enter the string: ");
var substr=window.prompt("Enter the string to be searched: ");
var len=str.length;
var sublen=substr.length;
j=0,i=0;
whlie(i<len)
{
if(str[i]==substr[j])
{
i++;
j++;
}
else
{
i++;
}
}
if(j==sublen)
{
document.write("Substring found");
}
else
{
document.write("Substring not found");
}
</script>
</body>
任何人都可以告诉我,这段代码有什么不对。提前谢谢..
答案 0 :(得分:3)
你有一个错字。 whlie(i<len)
应为while(i<len)
。
此外,还有更简单的方法,如评论中所述。
答案 1 :(得分:3)
您可以使用indexOf()
功能
var str=window.prompt("Enter the string: ");
var substr=window.prompt("Enter the string to be searched: ");
if( str.indexOf(substr) > -1 ){
document.write("Substring found");
}
else{
document.write("Substring not found");
}
如果你想在 while循环中而不是使用indexOf()
这样做...试试这个
var found = false;
i = 0;
while( i < str.length - substr.length + 1 )
{
if(str[i]==substr[0])
{
j = 0;
found = true;
while( j < substr.length ){
if( str[i+j] != substr[j] ){
found = false;
break;
}
j++;
}
}
if( found == true ) break;
i++;
}
if( found == true ){
document.write("Substring found");
}
else{
document.write("Substring not found");
}
紧凑 for loop 版本
var found = false;
for( i=0; i < str.length - substr.length + 1 ; i++){
if( str[i] == substr[0] )
for( j=0, found=true; j < substr.length; j++)
if( str[i+j] != substr[j] ){
found = false;
break;
}
if( found ) break;
}
编辑: - substr.length + 1
在两个版本的外部循环中添加。
答案 2 :(得分:0)
除了while
的拼写错误之外,你的实现在逻辑上是不正确的,因为一旦有部分匹配,它就会从它离开的点开始下一个匹配。
假设str =“RAVING_RAVEN_RISES” 和substr =“RAVEN”
现在,您的代码迭代过程如下:
...
你不会在任何地方递减j,所以当i = 7时,它不会尝试与R匹配,而是尝试与E匹配,导致它失败。
虽然String.prototype.indexOf是一个非常简单的解决方案(没有外部依赖关系),但如果考试的目的是检查您对算法的理解,而不是实现一个天真的算法,我建议您查看{{ 3}}字符串匹配算法。 javascript实现如下:
function kmp_search(s, w) {
var m = 0, i = 0,
pos, cnd, t,
slen = s.length,
wlen = w.length;
/* String to array conversion */
s = s.split("");
w = w.split("");
/* Construct the lookup table */
t = [-1, 0];
for ( pos = 2, cnd = 0; pos 0 )
cnd = t[cnd];
else
t[pos++] = 0;
}
/* Perform the search */
while ( m + i -1 )
i = t[i];
else
i = 0;
}
}
return -1;
}
答案 3 :(得分:0)
whlie(i<len) it will be while(i < len)
答案 4 :(得分:-1)
你可以用正则表达式很容易地做到这一点。不需要额外的库。
var str = window.prompt("Enter the string: "),
substr = window.prompt("Enter the string to be searched: "),
substrR = new RegExp(substr);
if (substrR.test(str)) {
document.write("Substring found");
}
else {
document.write("Substring not found");
}