একটি C++ প্রোগ্রামের সোর্স কোড দেওয়া থাকলে, সেখান থেকে লাইন কমেন্ট (//) এবং ব্লক কমেন্ট (/* ... */) মুছে ফেলতে হবে।
ইনপুট উদাহরণ
source = ["/*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;","}"]
সমাধানের পদ্ধতি
লাইন বাই লাইন পার্স করে কমেন্ট হ্যান্ডেল করা হয়।
removeComments(vector<string>& source)ফাংশন কমেন্ট-মুক্ত কোড রিটার্ন করবে।- একটি
bool comment = falseভেরিয়েবল দিয়ে ব্লক কমেন্টের স্টেট ট্র্যাক করুন। //পাওয়া গেলে বাকি লাইনটি ইগনোর করুন।/*পাওয়া গেলেcomment = trueকরুন এবং*/পাওয়া পর্যন্ত ক্যারেক্টার ইগনোর করুন।- কমেন্ট ব্লকের বাইরে থাকা ক্যারেক্টারগুলো রেজাল্ট স্ট্রিংয়ে যোগ করুন।
- প্রতিটি লাইনের শেষে যদি ব্লক কমেন্টে না থাকা থাকে, তবে লাইনটি আউটপুটে যোগ করুন।
উদাহরণ
#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;
}