কম্পিউটার

C++ ব্যবহার করে একটি স্ট্রিংয়ে মন্তব্যগুলি সরান


ইনপুট হিসাবে একটি C++ প্রোগ্রাম দেওয়া হয়েছে, এটি থেকে মন্তব্যগুলি সরান। 'সোর্স' হল একটি ভেক্টর যেখানে সোর্স কোডের i-th লাইন হল সোর্স[i]। এটি নতুন লাইন অক্ষর দ্বারা সোর্স কোড স্ট্রিং বিভক্ত করার ফলাফল উপস্থাপন করে \n। C++ এ, আমরা দুই ধরনের মন্তব্য তৈরি করতে পারি, যেমন, লাইন কমেন্ট, ব্লক কমেন্ট।

স্ট্রিং '\\' লাইনের মন্তব্যকে বোঝায়, যার মানে ডানদিকে এটির পাশের স্ট্রিংটি প্রোগ্রাম দ্বারা উপেক্ষা করা হবে।

স্ট্রিং '\* এবং *\' হল একটি মাল্টিলাইন কমেন্ট যা '\* থেকে শুরু করে *\' অবধি উপেক্ষা করা হবে।

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

উদাহরণ −

ইনপুট-1

source = ["/*Test program */", "int main()", "{ ", " // variable
declaration ", "int a, b, c;", "/* This is a test", " multiline ", "
comment for ", " testing */", "a = b + c;", "}"]
The line by line code is as follows:
/*Test program */
int main(){
   // variable declaration
   int a, b, c;
   /* This is a test multiline comment for testing */
   a = b + c;
}

আউটপুট

["int main()","{ "," ","int a, b, c;","a = b + c;","}"]The line by line
code is as follows:
int main() /// Main Function
{
   int a, b, c;
   a = b + c;
}

ব্যাখ্যা − স্ট্রিং /* মানে একটি মাল্টিলাইন মন্তব্য, লাইন 1 এবং লাইন 6-9 সহ। স্ট্রিং // লাইন 4কে মন্তব্য হিসাবে বোঝায়।

এই সমস্যা সমাধানের পদ্ধতি

  • আমরা একটি আদর্শ কম্পাইলারের মতো করে লাইন দ্বারা স্ট্রিং লাইন পার্স করব। আমরা যখন মুখোমুখি হই তখন এই ব্লক কোটগুলির মধ্যে এবং পরে সমস্ত অক্ষর উপেক্ষা করব।

  • একটি ফাংশন removeString(vector&source) একটি ইনপুট হিসাবে একটি সোর্স কোড নেয় এবং তার মন্তব্যগুলি সরানোর পরে কোডটি ফেরত দেয়৷

  • একটি বুলিয়ান ভেরিয়েবল মন্তব্য মিথ্যা হিসাবে আরম্ভ করা হয়, যা স্ট্রিং বা অক্ষরের নির্দিষ্ট ব্লকটি একটি মন্তব্য কিনা তা পরীক্ষা করবে।

  • যদি আমরা একটি ব্লক মন্তব্য শুরু করি এবং আমরা একটি ব্লকে না থাকি, তাহলে আমরা পরবর্তী দুটি অক্ষর এড়িয়ে যাব এবং সেই নির্দিষ্ট ব্লকে আমাদের অবস্থা পরিবর্তন করব৷

  • যদি আমরা একটি ব্লক মন্তব্য শেষ করি এবং আমরা একটি ব্লকে থাকি, তাহলে আমরা পরবর্তী দুটি অক্ষর এড়িয়ে যাবো এবং আমাদের অবস্থাকে ব্লকে না থাকার জন্য পরিবর্তন করব৷

  • যদি আমরা একটি লাইন মন্তব্য শুরু করি এবং একটি ব্লকে না থাকি তবে আমরা বাকি লাইনটি উপেক্ষা করব৷

  • যদি আমরা একটি ব্লক মন্তব্যে না থাকি (এবং এটি একটি মন্তব্যের সূচনা ছিল না), আমরা যে চরিত্রে আছি তা রেকর্ড করব৷

  • যদি আমরা প্রতিটি লাইনের শেষে একটি ব্লকে না থাকি, আমরা লাইনটি রেকর্ড করব।

  • অ্যালগরিদম O(উৎস) সময় জটিলতায় চলে। উৎস হল ইনপুট স্ট্রিং।

উদাহরণ

#include<bits/stdc++.h>
using namespace std;
vector<string>removeComments(vector<string>&source){
   vector<string>ans;
   string s;
   bool comment= false;
   for(int i = 0; i < source.size(); i++) {
      for(int j = 0; j < source[i].size(); j++) {
         if(!comment && j + 1 < source[i].size() && source[i][j] == '/' && source[i][j+1]=='/')
            break;
         else if(!comment && j + 1 < source[i].size() && source[i][j] == '/' && source[i][j+1]=='*')
comment = true;
            j++;
         else if(comment && j + 1 < source[i].size() && source[i][j] == '*' && source[i][j+1]=='/')
comment = false;
            j++;
         else if(!comment)
            s.push_back(source[i][j]);
      }
      if(!comment && s.size()) ans.push_back(s), s.clear();
   }
   return ans;
}
int main(){
   vector<string>source
   (“ source = ["/*Test program */", "int main()", "{ ", " // variable declaration ", "int a, b, c;", "/* This is a test", " multiline ", " comment for ", " testing */", "a = b + c;", "}"]
   The formatted code can be interpreted as -
   /*Test program */
   int main() // Main function{
      int a, b, c; // variable declaration
      /* This is a test multiline comment for testing */
      a = b + c;
   }”);
   vector<string>res= removeComments(source);
   for(auto x:res){
      cout<<x;
   }
   return 0;
}

আউটপুট

["int main()","{ "," ","int a, b, c;","a = b + c;","}"]The line by line
code is visualized as below:
int main(){
   int a, b, c;
   a = b + c;
}

  1. C++ ব্যবহার করে একটি প্রদত্ত সংখ্যার পুনরাবৃত্তি সংখ্যাগুলি সরান

  2. C++ ব্যবহার করে একটি অ্যারে থেকে লিডিং জিরো সরান

  3. C++ ব্যবহার করে একটি স্ট্রিং থেকে একটি প্রদত্ত শব্দ সরান

  4. C++ ব্যবহার করে একটি স্ট্রিং এর সাবস্ট্রিং এর সংখ্যা খুঁজুন