সি প্রোগ্রামিং-এ strtok() দিয়ে স্ট্রিংগুলিকে কীভাবে বিভক্ত করবেন?

Si Programim E Strtok Diye Stringulike Kibhabe Bibhakta Karabena



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

কিভাবে strtok() ফাংশন কাজ করে?

ব্যবহার করে একটি স্ট্রিং বিভক্ত করতে strtok() , আপনাকে প্রথমে বুঝতে হবে এটি কিভাবে কাজ করে। দ্য strtok() অক্ষর অনুসারে ইনপুট স্ট্রিং অক্ষর পড়ে যতক্ষণ না এটি একটি সীমানা জুড়ে আসে। একবার একটি বিভাজন পাওয়া গেলে, strtok() এটিকে একটি নাল অক্ষর '\0' দিয়ে প্রতিস্থাপন করে, কার্যকরভাবে মূল স্ট্রিংটিকে দুটি অংশে বিভক্ত করে। স্ট্রিং এর প্রথম অক্ষরের একটি পয়েন্টার তারপর ফাংশন দ্বারা ফিরে আসে। দ্য strtok() ফাংশনের সিনট্যাক্স হল:

strtok ( চর * str , const চর * আমি শেয়ার করি ) ;

দ্য strtok() ফাংশন দুটি আর্গুমেন্ট নেয়- টোকেনের সেটের প্রথম টোকেনের দিকে একটি পয়েন্টার এবং একটি স্ট্রিং যা বিভেদক অক্ষর ধারণ করে। এটি পরবর্তী টোকেনে একটি পয়েন্টার ফেরত দেয়, যা শেষ টোকেনটিকে বিভক্ত করার বিভাজনের পরপরই শুরু হয়। আর কোন টোকেন না থাকলে এটি NULL প্রদান করে।







সি প্রোগ্রামিং-এ Strtok() দিয়ে স্ট্রিংগুলি কীভাবে বিভক্ত করবেন?

এখানে কিভাবে ব্যবহার করতে হয় একটি উদাহরণ strtok() একটি স্ট্রিং বিভক্ত করতে:



# অন্তর্ভুক্ত করুন

#include

int প্রধান ( ) {

চর ইনপুট [ ] = 'লিনাক্স, ইঙ্গিত' ;

চর * টোকেন ;

টোকেন = strtok ( ইনপুট , ',' ) ;

যখন ( টোকেন != খালি ) {

printf ( '%s \n ' , টোকেন ) ;

টোকেন = strtok ( খালি , ',' ) ;

}

ফিরে 0 ;

}

উপরের উদাহরণে, আমরা প্রথমে একটি চরকে একটি পয়েন্টার ঘোষণা করি। আমরা তারপর ব্যবহার করি strtok() ইনপুট স্ট্রিংকে টোকেনে বিভক্ত করতে। এর প্রথম কল strtok() দুটি আর্গুমেন্ট নেয়: ইনপুট স্ট্রিং এবং ডিলিমিটার স্ট্রিং ','। প্রথম টোকেন, 'লিনাক্স', এটিই strtok() একটি পয়েন্টার হিসাবে ফিরে . আমরা তারপর ইনপুট স্ট্রিং এর মাধ্যমে পুনরাবৃত্তি করতে একটি while লুপ ব্যবহার করি, ব্যবহার করে strtok() অবশিষ্ট টোকেনগুলিকে বিভক্ত করার জন্য একটি NULL পয়েন্টার সহ। ডিলিমিটার স্ট্রিং আবার একটি আর্গুমেন্ট হিসাবে পাস করা হয় strtok() ডিলিমিটার অক্ষর নির্দেশ করতে।



আউটপুট





Strtok() ফাংশনের সীমাবদ্ধতা

1: মূল স্ট্রিং পরিবর্তন করে

দ্য strtok() ফাংশন স্ট্রিং এর একটি অনুলিপি ফেরত দেয় না; পরিবর্তে, এটি মূল স্ট্রিং পরিবর্তন করে। অতএব, যদি আপনার স্ট্রিংটি বিভক্ত করার পরে এটির একটি অপরিবর্তিত সংস্করণের প্রয়োজন হয়, তাহলে আপনাকে আহ্বান করার আগে মূল স্ট্রিংটির একটি অনুলিপি তৈরি করা উচিত strtok() .



2: অ্যাসিঙ্ক্রোনাস

একটি উল্লেখযোগ্য সীমাবদ্ধতা strtok() এটি একটি সময়ে শুধুমাত্র একটি একক স্ট্রিং ব্যবহার করা যেতে পারে. অন্য কথায়, আপনি একসাথে একাধিক স্ট্রিং টোকেনাইজ করতে এটি ব্যবহার করতে পারবেন না।

3: সীমিত ক্ষমতা

আরেকটি সম্ভাব্য সীমাবদ্ধতা যে strtok() পুনরাবৃত্ত সীমাবদ্ধতা পরিচালনা করার সীমিত ক্ষমতা আছে। উদাহরণস্বরূপ, যদি আপনার স্ট্রিং-এ শব্দের মধ্যে পরপর স্পেস থাকে, strtok() এটিকে একটি একক বিভাজন হিসাবে বিবেচনা করে। এই ধরনের ক্ষেত্রে পরিচালনা করতে, আপনাকে একটি ভিন্ন পদ্ধতি ব্যবহার করতে হবে।

উপসংহার

দ্য strtok() ফাংশন সি প্রোগ্রামিং এ স্ট্রিং বিভক্ত করার জন্য একটি খুব দরকারী ফাংশন। এটি একটি ইনপুট স্ট্রিং এবং একটি ডেলিমিটার স্ট্রিং নেয় এবং ইনপুট স্ট্রিং-এ পাওয়া প্রথম টোকেনে একটি পয়েন্টার ফেরত দেয়। strtok() ধ্বংসাত্মক, এইভাবে আপনার যদি মূল স্ট্রিংটির অখণ্ডতা রক্ষা করার প্রয়োজন হয়, তবে এটির পরিবর্তে এটির একটি নকল তৈরি করার পরামর্শ দেওয়া হয়। এখন যেহেতু আপনি এটি কীভাবে করবেন তা জানেন, আপনি প্রক্রিয়াকরণের জন্য যে কোনও স্ট্রিংকে ছোট ছোট টুকরোতে কাটতে পারেন।