মডিউল ১৯-৪ঃ কাউন্ট ভাওয়েলস

প্রবলেম লিংকঃ I. Count Vowels

প্রবলেম স্টেটমেন্টঃ ইনপুটে একটি স্ট্রিং দেওয়া থাকবে। সেই স্ট্রিং এ কয়টি ভাওয়েলস আছে তা কাউন্ট করতে হবে রিকারশনের মাধ্যমে। সল্যুশনঃ প্রথমে স্ট্রিংটি ইনপুট নিব। তারপর রিকারশন ফাংশনে স্ট্রিং দিয়ে দিব এবং ইন্ডেক্স হিসেবে ০ দিব। আমরা ০ ইন্ডেক্স থেকে ভাওয়েলস কাউন্ট করা শুরু করছি। রিকারশন ফাংশন শুরুতে রিকারশন ফাংশনকেই কল করে দিবে এবং ইন্ডেক্স এর সাথে ১ যোগ করে দিব কারন আমরা পরবর্তী ইনডেক্স নিয়ে কাজ করতে চাই। তারপর আমরা ধরে নিব রিকারশন ফাংশন পরবর্তী ইন্ডেক্স থেকে লাস্ট ইন্ডেক্স পর্যন্ত ভাওয়েল কাউন্ট করে দিয়ে দিবে। সেই কাউন্টটা আমরা একটি ভেরিয়েবলে স্টোর করব। তারপর যেই ইন্ডেক্সে ছিলাম তা নিয়ে কাজ করতে হবে। প্রথমেই আমরা যদি ক্যারেক্টারটি আপার কেসে থাকে তাহলে লোয়ার কেসে কনভার্ট করে নিব। তারপর চেক করে দেখব ক্যারেক্টারটি ভাওয়েল কিনা। ভাওয়েল হলে কাউন্ট এর সাথে ১ যোগ করে রিটার্ন করে দিব। আর ভাওয়েল না হলে কাউন্ট রিটার্ন করে দিব। এক্ষেত্রে বেস কেস হবে স্ট্রিং যখন শেষ হয়ে যাবে অর্থাৎ ইন্ডেক্সটি যখন নাল ক্যারেক্টারে থাকবে।

#include<stdio.h>

int fun(char s[],int i)
{
    // base case
    if(s[i]=='\0')   // স্ট্রিং যখন শেষ হয়ে যাবে অর্থাৎ ইন্ডেক্সটি যখন নাল ক্যারেক্টারে থাকবে। 
    {
        return 0;     // নাল ক্যারেক্টারে থাকলে আমরা ০ রিটার্ন করছি। কারন এখানে কোন ভাওয়েল নেই।
    }
    int ans=fun(s,i+1);     // রিকারশন ফাংশনকে কল করে স্ট্রিং দিয়ে দিচ্ছি এবং ইন্ডেক্সের সাথে ১ যোগ করে দিচ্ছি যাতে পরবর্তী ইন্ডেক্স নিয়ে কাজ করা হয়। কাজ করে যে কাউন্ট রিটার্ন করবে তা স্টোর করছি আরেকটি ভেরিয়েবলে। 
    if(s[i]>='A' && s[i]<='Z')   // যদি ক্যারেক্টারটি আপার কেসে থাকে তাহলে লোয়ার কেসে কনভার্ট করে নিচ্ছি। 
     {
        s[i]=s[i]+32;
    }
    if(s[i]=='a' || s[i]=='e' || s[i]=='o' || s[i]=='u' || s[i]=='i')  // ভাওয়েল কিনা চেক করছি।
    {
        return ans+1;     // ভাওয়েল হলে কাউন্ট এর সাথে ১ যোগ করে রিটার্ন করছি। 
    }
    else 
    {
        return ans;  // আর না হলে কাউন্ট রিটার্ন করে দিচ্ছি। 
    }
}
int main()
{
    char s[205];
    fgets(s,205,stdin);   // এফগেটস দিয়ে স্ট্রিং ইনপুট নিচ্ছি। কারন স্ট্রিং এর মধ্যে স্পেস থাকবে।
    int cnt=fun(s,0);     // রিকারশন ফাংশনকে কল করে ফাংশন থেকে রিটার্ন আসা কাউন্ট ভেলু স্টোর করে রাখা হচ্ছে।  
    printf("%d\n",cnt);   // কাউন্ট প্রিন্ট করা হচ্ছে। 
    return 0;
}

Last updated