আমি সি এবং সি ++ কে যতটা ভালোবাসি, আমি নাল টার্মিনেটেড স্ট্রিংয়ের পছন্দগুলিতে আমার মাথাটি স্ক্র্যাচ করতে সাহায্য করতে পারি না:
- দৈর্ঘ্যের উপসর্গযুক্ত (অর্থাত্ পাস্কাল) স্ট্রিংস সি এর আগে বিদ্যমান ছিল
- দৈর্ঘ্যের উপসর্গযুক্ত স্ট্রিং ধ্রুবক সময় দৈর্ঘ্যের অনুসন্ধানের অনুমতি দিয়ে বেশ কয়েকটি অ্যালগরিদমকে দ্রুত তৈরি করে।
- দৈর্ঘ্যের পূর্বনির্ধারিত স্ট্রিংগুলি বাফার ওভাররন ত্রুটিগুলি আরও বেশি করে তোলে।
- এমনকি একটি 32 বিট মেশিনেও, আপনি যদি স্ট্রিংটি উপলব্ধ মেমরির আকার হিসাবে মঞ্জুর করেন তবে দৈর্ঘ্যের উপসর্গযুক্ত স্ট্রিংটি নাল টার্মিনেটেড স্ট্রিংয়ের চেয়ে কেবল তিন বাইট বিস্তৃত। 16 বিট মেশিনে এটি একটি একক বাইট। Bit৪ বিট মেশিনে, 4 জিবি একটি যুক্তিসঙ্গত স্ট্রিং দৈর্ঘ্যের সীমা, তবে আপনি যদি মেশিন শব্দের আকারে এটি প্রসারিত করতে চান তবে bit৪ বিট মেশিনে সাধারণত পর্যাপ্ত মেমরি থাকে অতিরিক্ত সাত বাইটকে নাল আর্গুমেন্ট তৈরি করে। আমি জানি আসল সি স্ট্যান্ডার্ডটি অত্যন্ত ক্ষীণ মেশিনের জন্য লেখা হয়েছিল (মেমরির ক্ষেত্রে), তবে দক্ষতার যুক্তি আমাকে এখানে বিক্রি করে না।
- খুব সুন্দর প্রতিটি অন্যান্য ভাষা (যেমন পার্ল, পাস্কাল, পাইথন, জাভা, সি # ইত্যাদি) দৈর্ঘ্যের উপসর্গযুক্ত স্ট্রিং ব্যবহার করে। এই ভাষাগুলি সাধারণত স্ট্রিং ম্যানিপুলেশন বেঞ্চমার্কগুলিতে সিটিকে পরাজিত করে কারণ তারা স্ট্রিংগুলির সাথে আরও দক্ষ।
- সি ++ এটি
std::basic_string
টেমপ্লেটটি দিয়ে কিছুটা সংশোধন করেছে , তবে নাল টার্মিনেটেড স্ট্রিংগুলি প্রত্যাশী সরল চরিত্রের অ্যারেগুলি এখনও বিস্তৃত। এটিও অসম্পূর্ণ কারণ এটির জন্য হ্যাপ বরাদ্দ প্রয়োজন। - নাল টার্মিনেটেড স্ট্রিংগুলিতে একটি অক্ষর সংরক্ষণ করা উচিত (যথা, নাল), যা স্ট্রিংয়ে বিদ্যমান থাকতে পারে না, যখন দৈর্ঘ্যের উপসর্গযুক্ত স্ট্রিংগুলিতে এমবেডড নাল থাকতে পারে।
এর মধ্যে বেশ কয়েকটি বিষয় সি এর চেয়ে সাম্প্রতিককালে প্রকাশিত হয়েছে, সুতরাং সিগুলি সেগুলি না জানার জন্য এটি বোধগম্য হবে। তবে সি হওয়ার আগে বেশ কয়েকটি বেশ ভাল ছিল। কেন সুস্পষ্টতর উচ্চতর দৈর্ঘ্যের উপসর্গের পরিবর্তে নাল টার্মিনেটেড স্ট্রিংগুলি বেছে নেওয়া হবে?
সম্পাদনা : যেহেতু কিছু উপরে আমার দক্ষতার পয়েন্টে কিছু তথ্য চেয়েছিল (এবং আমি ইতিমধ্যে সরবরাহিত বিষয়গুলি পছন্দ করে না), সেগুলি কয়েকটি জিনিস থেকে শুরু করে:
- নাল টার্মিনেটেড স্ট্রিং ব্যবহার করে কনক্যাটটির জন্য ও (এন + এম) সময়ের জটিলতা প্রয়োজন। দৈর্ঘ্যের উপসর্গের জন্য প্রায়শই কেবল ও (এম) প্রয়োজন হয়।
- নাল টার্মিনেটেড স্ট্রিংগুলি ব্যবহার করে দৈর্ঘ্যের জন্য ও (এন) সময়ের জটিলতা প্রয়োজন। দৈর্ঘ্যের উপসর্গটি হ'ল ও (1)।
- দৈর্ঘ্য এবং কনক্যাট এখন পর্যন্ত সবচেয়ে সাধারণ স্ট্রিং অপারেশন। এমন বেশ কয়েকটি মামলা রয়েছে যেখানে নাল টার্মিনেটেড স্ট্রিংগুলি আরও কার্যকর হতে পারে তবে এগুলি প্রায়শই কম ঘটে।
নীচের উত্তরগুলি থেকে, এগুলি এমন কয়েকটি ক্ষেত্রে রয়েছে যেখানে নাল টার্মিনেটেড স্ট্রিংগুলি আরও কার্যকর:
- আপনার যখন স্ট্রিংয়ের শুরুটি কেটে ফেলতে হবে এবং এটি কোনও পদ্ধতিতে পাস করার প্রয়োজন হবে। মূল স্ট্রিংটি নষ্ট করার অনুমতি দেওয়া সত্ত্বেও আপনি দৈর্ঘ্যের উপসর্গের সাথে ধীরে ধীরে এটি করতে পারবেন না, কারণ দৈর্ঘ্যের উপসর্গটিকে সম্ভবত প্রান্তিককরণের নিয়মগুলি অনুসরণ করা দরকার।
- কিছু ক্ষেত্রে যেখানে আপনি কেবল অক্ষর অনুসারে স্ট্রিং চরিত্রটি লুপ করছেন আপনি একটি সিপিইউ রেজিস্টার সংরক্ষণ করতে সক্ষম হতে পারেন। দ্রষ্টব্য যে আপনি কেবল স্ট্রিং বরাদ্দ করেননি সেই ক্ষেত্রে এটি কাজ করে (কারণ তখন আপনাকে এটি মুক্ত করতে হবে, মূলত মলোক এবং বন্ধুদের কাছ থেকে প্রাপ্ত পয়েন্টারটি ধরে রাখতে আপনি সেই সিপিইউ রেজিস্টার ব্যবহার করে সংরক্ষণ করেছিলেন)।
উপরের কোনওটি দৈর্ঘ্য এবং কনকটের মতো প্রায় সাধারণ নয়।
নীচে উত্তরগুলিতে আরও একটি জোর দেওয়া আছে:
- আপনার স্ট্রিংয়ের শেষটি কেটে ফেলতে হবে
তবে এটি একটি ভুল - এটি নাল টার্মিনেটেড এবং দৈর্ঘ্যের উপসর্গযুক্ত স্ট্রিংগুলির জন্য একই সময়ের পরিমাণ। (নাল টার্মিনেটেড স্ট্রিংগুলি কেবল একটি নাল আটকে থাকে যেখানে আপনি নতুন প্রান্তটি চান, দৈর্ঘ্যের উপসর্গগুলি কেবল উপসর্গ থেকে বিয়োগ করে।)