2015-10-05 2 views
-2

Я пытаюсь создать функцию с двумя параметрами, которые будут подсчитывать, как повторяется символ в заданной строке. У меня есть код ниже, но он работает неправильно. Кроме того, я пытаюсь сделать это нерекурсивной функцией. Может ли кто-нибудь помочь мне в этом?нерекурсивная функция с двумя параметрами с использованием Javascript

function count(char,word) { 
    var a,b; 
    a= char 
    b= word 
    c= b.indexof(a) 
    return c 
} 

count('a','apple') 
+0

чека здесь http://stackoverflow.com/questions/11649255/how-to-count-the-number-of- вхождения-оф-каждый-п-в-к-массив. – jsh

+0

** счет сколько раз знак повторяет **. Не знаю, почему ответы пропустили это. –

+0

@Oriol - Я верю, что вопрос в том, сколько раз символ повторяется в слове. Например, l, предположительно, не должно быть 3. –

ответ

4

Если вы имеете в виду по вашему вопросу - «сколько вхождений данного символа в слово», то есть несколько возможностей. Вы можете цитировать вызов .indexOf(), вы можете позволить регулярному выражению находить все совпадения или вы можете просто перебирать строку вручную.

Если вы имеете в виду что-то другое по вашему вопросу, уточните вопрос.

Вот некоторые возможности:

function count(char, word) { 
 
     var cntr = 0; 
 
     var pos = 0; 
 
     while ((pos = word.indexOf(char, pos)) !== -1) { 
 
      ++cntr; 
 
      ++pos; 
 
     } 
 
     return cntr; 
 
    
 
    } 
 

 
    var cnt = count('a','apple'); 
 
    document.write(cnt + "<br>"); 
 

 
    cnt = count('p','apple'); 
 
    document.write(cnt);

Или вы могли бы использовать регулярное выражение, если ваш персонаж не является особым регулярным выражением характера:

 function count(char, word) { 
 
     var cnt = word.match(new RegExp(char, "g")); 
 
     return cnt ? cnt.length: 0; 
 
    } 
 

 
    var cnt = count('p', 'apple'); 
 
    document.write(cnt);

Или, вы можете просто перебирать строку и вручную подсчитывать:

function count(char, word) { 
 
    var cnt = 0; 
 
    for (var i = 0; i < word.length; i++) { 
 
     if (word.charAt(i) === char) { 
 
      ++cnt; 
 
     } 
 
    } 
 
    return cnt; 
 
} 
 

 
var cnt = count('p', 'apple'); 
 
document.write(cnt);

0

Это очень простой цикл, который перебирает слова, считая экземпляры ч.

function count(ch,word) { 
    var i,count = 0; 
    for(i = 0; i < word.length; i++) { 
    if (word[i] === ch) count++; 
    } 
    return count; 
} 

console.log(count('p','apple')); 
+0

, пожалуйста, добавьте описание того, как это разрешает проблему адеектов. [ответить] –

0

Вы нужны петли:

function count(c, word) { 
 
    var i = 0; 
 
    var arr = word.split(''); //break into array 
 
    var a; 
 
    while (arr.length) { //until array runs out of letters 
 
    a = arr.pop(); // pull out one by one 
 
    if (a === c) // got match 
 
     i++; 
 
    } 
 
    return i; 
 
} 
 

 
alert(count('a', 'apple'));

0

Самый простой способ, вероятно, будет просто пробегаем по входу. Как это:

function count(char,word) { 
    var count = 0; 
    for(var i = 0; i < word.length; i++) 
    { 
    if(word.charAt(i) === char) 
     count++; 
    } 
    return count; 
} 
5

Для подсчета вхождений строки внутри другой, вы можете split последние используя бывший в качестве разделителя, а затем использовать length для подсчета элементов возвращаемого массива.

function count(char, word) { 
    return word.split(char).length - 1; 
} 
0

Вот как вы можете сделать это с помощью регулярного выражения:

function countLetter(letter,word) { 
    var regexp = New RegExp(letter, 'g') //searches word for letter 
    var arr = word.match(regexp);  //finds the letter within the word, 
    return arr == null ? 0 : arr.length; 
}          //sticks that letter into arr for each time it 
             //appears in the word 

console.log(countLetter('a','apple a a a ')); 
//arr = ['a', 'a', 'a', 'a'], arr.length = 4 
console.log(countLetter('p','apples')); 
//arr = ['p','p'] arr.length = 2 

Надеется, что это помогает!

+1

Знать 'arr' будет' null', если нет совпадения. Поэтому 'arr.length' будет бросать. – Oriol

+0

Хороший улов, редактируемый. – dmwong2268

0

Я бы с агрегатной функцией для простого подсчета вхождений

function count(char,word) { 
    return [].reduce.call(word,function(p,c){ 
     return p += char == c ? 1 : 0; 
    },0); 
} 

Однако, это было бы просто для итогов.Для подсчета «в строке» сильно отличается и потребует отслеживания повторов

function count(char,word) { 
    var total = 0; 
    var max = 0; 
    [].reduce.call(word.substr(1,word.length),function(p,c){ 
     if(p == c && c == char){ total++ }else{ 
      if(total > max) max = total; 
      total = 0; 
     } 
     return c; 
    },word[0]); 
    return max > 0 ? max + 1 : 0; 
}