检查字符串中字符使用次数的函数

时间:2015-05-05 01:56:54

标签: javascript if-statement while-loop

我正在编写一个函数,它将一个字符串作为参数,检查它是否给定一个字符(在本例中为“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"));

3 个答案:

答案 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

供您参考,在现代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; 

 }