How do I count the number of occurrences of a character in a string?
For example, the character ‘a’ appears in the string ‘Mary had a little lamb’ 4 times.
There are several effective ways to count character occurrences in a string, ranging from simple manual iteration to using built-in language methods and regular expressions. The approach you choose depends on your programming language, performance requirements, and specific use case.
- Basic Iteration Method
- Built-in String Methods
- Regular Expression Approach
- Language-Specific Solutions
- Performance Considerations
- Practical Examples
Basic Iteration Method
The fundamental approach involves iterating through each character in the string and counting matches. This method works across all programming languages and provides clear control over the counting process.
def count_char_occurrences(string, char):
count = 0
for c in string:
if c == char:
count += 1
return count
# Example usage matching your query
text = 'Mary had a little lamb'
char = 'a'
result = count_char_occurrences(text, char)
print(f"The character '{char}' appears {result} times")
# Output: The character 'a' appears 4 times
This approach has a time complexity of O(n) where n is the string length, as each character must be checked exactly once.
Built-in String Methods
Most programming languages provide optimized built-in methods for character counting:
JavaScript:
// Using split method
const text = 'Mary had a little lamb';
const char = 'a';
const count = text.split(char).length - 1;
console.log(`The character '${char}' appears ${count} times`);
// Using match method
const countUsingMatch = (text.match(new RegExp(char, 'g')) || []).length;
Java:
public class CharacterCounter {
public static void main(String[] args) {
String text = "Mary had a little lamb";
char targetChar = 'a';
// Using iteration loop
int count = 0;
for (int i = 0; i < text.length(); i++) {
if (text.charAt(i) == targetChar) {
count++;
}
}
System.out.println("Character '" + targetChar + "' appears " + count + " times");
}
}
Regular Expression Approach
Regular expressions provide powerful pattern matching capabilities for counting occurrences:
import re
text = 'Mary had a little lamb'
char = 'a'
count = len(re.findall(re.escape(char), text))
print(f"Using regex: {count} occurrences of '{char}'")
const text = 'Mary had a little lamb';
const char = 'a';
const regex = new RegExp(char, 'g');
const matches = text.match(regex);
const count = matches ? matches.length : 0;
console.log(`Regex count: ${count}`);
Language-Specific Solutions
Python:
# Using built-in count method
text = 'Mary had a little lamb'
char = 'a'
count = text.count(char)
print(f"Python count method: {count} occurrences")
# Using collections.Counter
from collections import Counter
char_count = Counter(text)
count = char_count.get(char, 0)
C:
#include <stdio.h>
#include <string.h>
int countCharacter(const char *str, char target) {
int count = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == target) {
count++;
}
}
return count;
}
int main() {
const char *text = "Mary had a little lamb";
char targetChar = 'a';
int count = countCharacter(text, targetChar);
printf("Character '%c' appears %d times\n", targetChar, count);
return 0;
}
Ruby:
text = 'Mary had a little lamb'
char = 'a'
count = text.count(char)
puts "Ruby count method: #{count} occurrences of '#{char}'"
Performance Considerations
When selecting a counting method, consider these factors:
- Time Complexity: Most approaches are O(n), but built-in methods are often optimized
- Space Complexity: Some methods create temporary objects (like
split()or regex matches) - Case Sensitivity: Decide if the count should be case-sensitive or not
- Unicode Support: Ensure the method handles Unicode characters correctly
For example, JavaScript’s split() method creates an array of substrings, using O(n) space, while a simple loop uses O(1) additional space.
Practical Examples
Case-Insensitive Counting:
text = 'Mary had a little lamb'
char = 'a'
count = text.lower().count(char.lower())
print(f"Case-insensitive count: {count} occurrences")
Counting Multiple Characters:
text = 'Mary had a little lamb'
chars_to_count = ['a', 'l', 'm']
for char in chars_to_count:
count = text.count(char)
print(f"'{char}': {count} occurrences")
Using indexOf() in Loop (Rosetta Code approach):
function countOccurrences(str, substr) {
let count = 0;
let index = str.indexOf(substr);
while (index >= 0) {
count++;
index = str.indexOf(substr, index + 1);
}
return count;
}
const result = countOccurrences('Mary had a little lamb', 'a');
console.log(`indexOf method: ${result} occurrences`);
Sources
- C Program To Count Occurrences Of A Character In String | C Programs
- Count Occurrences of Character in String JavaScript
- Count occurrences of a substring - Rosetta Code
- String (Java Platform SE 8 )
- 50 Most Asked Basic Coding Questions Of All Time
Conclusion
Counting character occurrences in strings is a fundamental programming task with multiple solution approaches. The best method depends on your programming language, performance requirements, and specific use case. For most applications, built-in string methods like Python’s count() or JavaScript’s split() provide the simplest solution, while manual iteration offers more control and better space efficiency. Regular expressions are powerful for complex pattern matching but may be overkill for simple character counting. Always consider case sensitivity, Unicode support, and performance characteristics when implementing character counting functionality.
For your specific example of counting ‘a’ in ‘Mary had a little lamb’, any of these methods will correctly return 4 occurrences, demonstrating the consistency across different approaches.