একটি নমুনা মেলে অক্ষরগুলি মুছে ফেলা

C:
একটি নমুনা মেলে অক্ষরগুলি মুছে ফেলা

কিভাবে:

C সরাসরি প্যাটার্নের উপর ভিত্তি করে স্ট্রিং থেকে চরিত্রগুলি মুছে ফেলার জন্য কোনো অন্তর্নির্মিত ফাংশন সহ আসে না, যা কিছু উচ্চ মাত্রার ভাষায় রয়েছে। তবে, আপনি স্ট্রিংটির উপর ম্যানুয়ালি ইটারেটিং করে এবং অনাকাঙ্ক্ষিত অক্ষরগুলি বাদ দিয়ে একটি নতুন স্ট্রিং তৈরি করে সহজেই এই কাজটি সম্পাদন করতে পারেন। উদাহরণ স্বরূপ, ধরা যাক আপনি একটি স্ট্রিং থেকে সকল ডিজিট মুছে ফেলতে চান। আপনি এটি নিম্নলিখিতভাবে করতে পারেন:

#include <stdio.h>
#include <ctype.h>

void remove_digits(char *str) {
    char *src = str, *dst = str;
    while (*src) {
        if (!isdigit((unsigned char)*src)) {
            *dst++ = *src;
        }
        src++;
    }
    *dst = '\0';
}

int main() {
    char str[] = "C Programming 101: The Basics!";
    remove_digits(str);
    printf("Result: %s\n", str);
    return 0;
}

নমুনা আউটপুট:

Result: C Programming : The Basics!

এই উদাহরণে isdigit ফাংশনটি ctype.h থেকে ডিজিটগুলি চিহ্নিত করে, স্ট্রিংয়ের শুরুতে নন-ডিজিট চরিত্রগুলির অবস্থান পরিবর্তন করে, এবং সকল চরিত্র মূল্যায়ন করা হলে স্ট্রিং শেষ করে।

গভীর ডুব:

উপস্থাপিত সমাধানটি একই অ্যারের মধ্যে দুই পয়েন্টারের পদ্ধতি ব্যবহার করে অনাকাঙ্ক্ষিত চরিত্রগুলি ফিল্টার করে, যা সি’র হাতে-কলমে মেমোরি ম্যানেজমেন্ট দর্শনের একটি প্রতীক। এই পদ্ধতিটি কার্যকর কারণ এটি ইন-প্লেস হয়ে থাকে, অতিরিক্ত মেমোরি বরাদ্দের প্রয়োজন হয় না, এবং এতে ওভারহেড কমিয়ে আনা হয়।

ইতিহাসগতভাবে, C ভাষায় উচ্চ-মাত্রার স্ট্রিং ম্যানিপুলেশন ফাংশনের অভাবে প্রোগ্রামারদের মেমোরি স্তরে স্ট্রিং হ্যান্ডলিংয়ের গভীর বোঝাপড়ার উন্নতি ঘটেছে, যা উপরে উল্লেখিত মতো নতুন পদ্ধতি উদ্ভাবনে সহায়ক হয়েছে। এটি যদিও বেশি নিয়ন্ত্রণ এবং দক্ষতার সুবিধা দেয়, তবে এটি বাফার ওভারফ্লো এবং অফ-বাই-ওয়ান ভুলের মতো উচ্চ ঝুঁকির সাথে আসে।

আধুনিক ডেভেলপমেন্ট প্রেক্ষাপটে, বিশেষ করে নিরাপত্তা এবং সুরক্ষা গুরুত্ব দেওয়া হলে, এমন ভাষাগুলি পছন্দ করা হতে পারে যা এই ধরণের নিম্ন-স্তরের অপারেশনগুলি লুকিয়ে রাখে। তবে, সূক্ষ্ম-দক্ষতা অনুকূলনের জন্য বা C এর সামান্যতা এবং গতি প্রধান পরিবেশে কাজ করার জন্য এই C পদ্ধতিগুলি বুঝতে ও ব্যবহার করতে পারাটা অমূল�