Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm nguyên âm trong chuỗi dùng con trỏ C++ (Phiên bản 2)

Đếm nguyên âm (vowels) trong chuỗi sử dụng con trỏ. Duyệt qua từng ký tự qua con trỏ, so sánh với tập {a,e,i,o,u,A,E,I,O,U}.

Thuật toán

countVowels(str):
    count = 0
    for each char ch in str (via pointer):
        if ch in {a,e,i,o,u,A,E,I,O,U}:
            count++
    return count
end

Code ví dụ (hỗ trợ cả chữ hoa/thường)

#include <iostream>
#include <cctype>
using namespace std;

int countVowels(const char *str) {
    int count = 0;
    while(*str != '\0') {
        char c = tolower(*str); // Chuyển về thường để so sánh
        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
            count++;
        str++;
    }
    return count;
}

int main() {
    string input;
    cout << "Nhap chuoi: ";
    getline(cin, input); // Đọc cả dòng có space
    
    cout << "So nguyen am: " << countVowels(input.c_str());
    return 0;
}

Kết quả

Nhap chuoi: EDucation
So nguyen am: 5

Giải thích con trỏ

  • const char *str: con trỏ đến ký tự const (không sửa đổi chuỗi).
  • *str: lấy giá trị ký tự tại vị trí con trỏ.
  • str++: di chuyển con trỏ đến ký tự tiếp theo.
  • *str != '\0': dừng khi gặp null terminator.

Phiên bản hiện đại (C++11) - Không dùng con trỏ thô

int countVowelsModern(const string& s) {
    int count = 0;
    for(char c : s) {
        c = tolower(c);
        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
            count++;
    }
    return count;
}

// Hoặc dùng algorithm
#include <algorithm>
int countVowelsAlgo(const string& s) {
    return count_if(s.begin(), s.end(), [](char c) {
        c = tolower(c);
        return c=='a' || c=='e' || c=='i' || c=='o' || c=='u';
    });
}

So sánh

Phương phápƯu điểmNhược điểm
Con trỏ C-styleHiểu bản chất bộ nhớ, nhanhDễ lỗi, không an toàn
Range-based forĐọc dễ, an toàn, hiện đạiÍt control hơn
std::count_ifFunctional, tái sử dụngHơi verbose