شارك المقالة

نحسب حروف العلة الإنجليزية في C++ داخل نص كامل باستخدام std::string وgetline. الحروف المطلوبة هنا a وe وi وo وu بالحالتين الكبيرة والصغيرة. المثال لا يحاول تصنيف حروف العربية لغويًا، ولا يعتبر y حرف علة ضمن هذه القاعدة المحددة.

الكود الكامل باستخدام C++17

#include <iostream>
#include <string>

std::size_t countVowels(const std::string& text) {
    const std::string vowels = "aeiouAEIOU";
    std::size_t count = 0;
    for (char character : text)
        if (vowels.find(character) != std::string::npos) ++count;
    return count;
}

int main() {
    std::string text;
    std::cout << "English text: ";
    if (!std::getline(std::cin, text)) return 1;
    std::cout << "Vowels: " << countVowels(text) << '\n';
}

كيف يتم العد؟

نمر على كل محرف في النص، ثم نبحث عنه داخل السلسلة vowels. إذا لم تكن نتيجة find مساوية std::string::npos نزيد العداد. المثال Hello World يعطي 3، وAEIOU يعطي 5، وsky يعطي صفرًا حسب تعريف الحروف المستخدم هنا.

قراءة المسافات والنص الفارغ

تقرأ getline السطر كاملًا بدل التوقف عند أول مسافة. لا نستخدم مصفوفة ثابتة من 100 محرف فتقتطع النص الطويل، ولا نضع محرف صفر غير مرئي داخل النسخة المنشورة. النص الفارغ مدخل صالح ويكون عدده صفرًا، أما فشل قراءة السطر فيعيد رمز خروج مختلفًا.

التطوير وحدود Unicode

يمكن توسيع المثال لإرجاع تكرار كل حرف بدل إجمالي واحد. المقارنة الحالية تخص الحروف اللاتينية ASCII المحددة؛ النص بترميز UTF-8 قد يحتوي محارف متعددة البايتات تحتاج معالجة Unicode إذا تغير هدف البرنامج. لا تحول char عشوائيًا إلى tolower دون مراعاة مجال القيم المقبول للدالة.

ترجمة المثال وتشغيله

احفظ المثال في ملف main.cpp واختر معيار C++17 في محررك. مع GCC أو Clang يمكنك الترجمة بالأمر g++ -std=c++17 -Wall -Wextra -pedantic main.cpp -o main ثم تشغيل الملف الناتج. ترجم كل مثال كبرنامج مستقل؛ لا تجمع دوال main من دروس مختلفة في ملف واحد.

شاهد أيضًا
مقالات ذات صلة
🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع