Cho chuỗi str. Đếm số phụ âm (không phải nguyên âm a, e, i, o, u) bằng phương pháp lặp và đệ quy.
Ví dụ
"tutorials point" → 8 phụ âm (t, t, r, l, s, p, n, t)
"a e io u" → 0 phụ âm
Phương pháp lặp (Iterative)
- Duyệt từng ký tự, kiểm tra là chữ cái và không phải nguyên âm.
- Hàm consonant(ch): chuyển chữ hoa, trả về true nếu không phải A,E,I,O,U và trong khoảng A-Z.
Phương pháp đệ quy (Recursive)
- Base case: n == 1 → trả về consonant(str[0]).
- Recursive: consonantcount(str, n-1) + consonant(str[n-1]).
Ví dụ minh họa - Lặp (C++)
#include <iostream>
using namespace std;
bool consonant(char ch) {
ch = toupper(ch);
return !(ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') && ch >= 65 && ch <= 90;
}
int countconsonants(string s) {
int result = 0;
for (int i = 0; i < s.length(); i++) {
if (consonant(s[i])) ++result;
}
return result;
}
int main() {
string s = "wx abc def";
cout << "count is: " << countconsonants(s);
return 0;
}
Đầu ra
count is: 6
Ví dụ minh họa - Đệ quy (C++)
#include <iostream>
using namespace std;
bool consonant(char ch) {
ch = toupper(ch);
return !(ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') && ch >= 65 && ch <= 90;
}
int consonantcount(string str, int n) {
if (n == 1) return consonant(str[0]);
return consonantcount(str, n - 1) + consonant(str[n - 1]);
}
int main() {
string str = "wx abc def";
cout << "count is: " << consonantcount(str, str.length());
return 0;
}
Đầu ra
count is: 6