Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> 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) इनपुट के रूप में एक स्रोत कोड लेता है और उसकी टिप्पणियों को हटाने के बाद कोड लौटाता है।

  • एक बूलियन वैरिएबल कमेंट को गलत के रूप में इनिशियलाइज़ किया जाता है, जो जाँच करेगा कि स्ट्रिंग या कैरेक्टर का विशेष ब्लॉक एक कमेंट है या नहीं।

  • यदि हम एक ब्लॉक टिप्पणी शुरू करते हैं और हम एक ब्लॉक में नहीं हैं, तो हम अगले दो वर्णों को छोड़ देंगे और उस विशेष ब्लॉक में अपना राज्य बदल देंगे।

  • यदि हम एक ब्लॉक टिप्पणी को समाप्त करते हैं और हम एक ब्लॉक में हैं, तो हम अगले दो वर्णों को छोड़ देंगे और हमारे राज्य को एक ब्लॉक में नहीं होने के लिए बदल देंगे।

  • अगर हम एक लाइन कमेंट शुरू करते हैं और एक ब्लॉक में नहीं हैं, तो हम बाकी लाइन को नजरअंदाज कर देंगे।

  • अगर हम एक ब्लॉक टिप्पणी में नहीं हैं (और यह एक टिप्पणी की शुरुआत नहीं थी), हम उस चरित्र को रिकॉर्ड करेंगे जिस पर हम हैं।

  • यदि हम प्रत्येक पंक्ति के अंत में ब्लॉक में नहीं हैं, तो हम पंक्ति को रिकॉर्ड करेंगे।

  • एल्गोरिथ्म ओ (स्रोत) समय जटिलता में चलता है। स्रोत इनपुट स्ट्रिंग है।

उदाहरण

#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++ का उपयोग करके किसी सरणी से अग्रणी शून्य निकालें

    हमें एक सरणी प्रदान की जाती है, और हमें दिए गए सरणी से अग्रणी शून्य को हटाने और फिर सरणी को प्रिंट करने का काम सौंपा जाता है। Input : arr[] = {0, 0, 0, 1, 2, 3} Output : 1 2 3 Input : arr[] = {0, 0, 0, 1, 0, 2, 3} Output : 1 0 2 3 हम एक नई सरणी बना सकते हैं जिसमें दी गई समस्या में पिछले सरणी के अग

  1. C++ का उपयोग करके किसी दिए गए शब्द को स्ट्रिंग से निकालें

    इस लेख में, हम किसी दिए गए शब्द को किसी दिए गए स्ट्रिंग से हटाने की समस्या को हल करेंगे। उदाहरण के लिए - Input : str = “remove a given word ”, word = “ remove ” Output : “ a given word ” Input : str = “ god is everywhere ”, word = “ is ” O

  1. C++ का उपयोग करके एक स्ट्रिंग के सबस्ट्रिंग की संख्या ज्ञात करें

    इस लेख में, आप किसी दिए गए स्ट्रिंग में बनाए जा सकने वाले सबस्ट्रिंग (गैर-रिक्त) की संख्या को खोजने के तरीकों के बारे में जानेंगे। Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, &lsqu