我正在编写一个函数,它将一个字符串作为参数,检查它是否给定一个字符(在本例中为“B”),然后返回一个反映该字符出现次数的整数。我知道这可以使用正则表达式等完成,但我使用的教程到目前为止还没有提到正则表达式。代码时间:
function countBs(string) {
var i = 0;
var n = 0;
var position = string.charAt(n);
while (i < string.length) {
if (string.charAt(n) == "B")
n += 1;
i++; //This line causes the following else statement to throw a syntax error. But it's the only way I can think of to have the loop continue iteration *while* checking for equivalence to "B"
else
i++;
return n;
}
}
然后查看console.log(countBs("ABBA"));
答案 0 :(得分:1)
尝试用大括号包裹它:
int main(void)
{
char whole[100] = "Please help me";
char *token;
char individual[100];
token = strtok(whole, " ");
individual = token; //I don't know what code fits in here
}
if (string.charAt(n) == "B")
{ n += 1;
i++;
}
需要先前的else
,其间没有其他声明。 if
位于i++
之外。
答案 1 :(得分:1)
你的代码很破碎。
function countBs(string) {
var i = 0;
var n = 0;
// var position = string.charAt(n); // REMOVE--NOT NECESSARY
while (i < string.length) {
if (string.charAt(i) == "B") // i, NOT n
n++; // CONSISTENCY IN ADD-ONE SYNTAX
// i++; // INCREMENT ONCE BELOW
//else
i++;
}
return n; // MUST GO OUTSIDE THE LOOP
}
因此,正确的代码是:
function countBs(string) {
var i = 0;
var n = 0;
while (i < string.length) {
if (string.charAt(i) == "B") n++;
i++;
}
return n;
}
使用while
循环没有什么特别的错误,但for
会更自然:
function countBs(str) {
var n = 0;
for (var i = 0; i < str.length; i++) if (str[i]== "B") n++;
return n;
}
供您参考,在现代JS中,您可以避免循环和变量。首先,让我们编写一个单独的检查函数:
function isB(c) { return c === 'B'; }
然后写
function countBs(str) {
return str . split('') . filter(isB) . length;
}
或使用reduce
:
function countBs(str) {
return str.split('').reduce(function(cnt, c) {
return cnt + isB(c);
}, 0);
}
或者,虽然你说你不想使用正则表达式:
function countBs(str) {
return (str.match(/B/g) || []) . length;
}
如果您是在ES6环境中编写,那么使用数组理解
function countBs(str) {
return [for (c of str) if (isB(c)) c] . length;
}
答案 2 :(得分:1)
这是我的答案
function countBs(Str)
{
let char = "B" ;
return String(Str).split(char).length - 1;
}
function countChar(Str, char)
{
return String(Str).split(char).length - 1;
}