user4436188
user4436188

Reputation:

How do I count the number of occurrences of a character in a string using textboxes?

I want to count the number of times the single character, denoted by letter, occurs in str.

I have tried this code but I constantly receive back a value of just 1.

var x = document.getElementById('txt1').value;
var y = document.getElementById('txt2').value;

var letter = x;
var str = y;    

for (var i = count = 0; i < str.length; count +++(letter === str[i++]));
count;

alert(i);

Upvotes: 0

Views: 1188

Answers (3)

user3310334
user3310334

Reputation:

The current problem is this part of your for loop: count +++(letter === str[i++]), let's walk through what happens:

  1. If letter === str[i], add one (true) to count.
  2. Add one to i.
  3. Count is incremented.
  4. Repeat unless i >= str.length.

As you can see, count is always incremented by at least 1, sometimes 2. i is also incremented in each repetition.

What you need is a for-loop that looks like:

for (var i = count = 0; i < str.length;  count += (str[i++] == letter));

function getNumber(){
  var str = document.getElementById('txt1').value;
  var letter = document.getElementById('txt2').value;

  var count;
  for (var i = count = 0; i < str.length;  count += (str[i++] == letter));

  document.querySelector('p').innerText = count;
}
str: <input type="text" id="txt1"><br>
letter: <input type="text" id="txt2"><br>
<button onclick="getNumber()">Get Result</button><br>
result: <p></p>

Or full experience at this jsFiddle

Here ^^, count is only incremented if letter == str[i], so if that condition is false, count remains unchanged.


Or, perhaps less succinctly, you can use a regular expression (regex) to the same effect:

var regex = new RegExp(letter, 'g');
var count = (letter.length) ? str.match(regex).length : 0;

Upvotes: 1

Mic
Mic

Reputation: 4004

Here's a basic implementation using regex instead of splitting or writing a loop.

function go() {
  var letter = document.getElementById('txt1').value;
  var str = document.getElementById('txt2').value;
  var re = new RegExp(letter,"g");
  var count = (str.match(re || []).length);
  alert(count);
}
<label for="txt1">Character</label>
<input type="text" id="txt1" maxlength="1" />
<br/>
<label for="txt2">String</label>
<input type="text" id="txt2" />
<input type="button" value="go" onclick="go()" />

Upvotes: 0

indubitablee
indubitablee

Reputation: 8206

something like this? http://jsfiddle.net/swm53ran/96/

<input id="txt1" value="i"/>
<input id="txt2" value="This is my string"/>

<script type="text/javascript">
    var x =document.getElementById('txt1').value;
    var y = document.getElementById('txt2').value;

    var letter = x;
    var str = y;    
    var count = 0;

    var arrayX = str.split('');
    console.log(arrayX);    

    for (var i = 0; i < arrayX.length; i++) {
        if (arrayX[i] == letter) {
            count++;
        }   
    }

    alert(count);
</script>

Upvotes: 1

Related Questions