Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ का उपयोग करके स्ट्रिंग में टिप्पणियाँ हटाएं


इनपुट के रूप में एक C++ प्रोग्राम दिया गया है, उससे टिप्पणियाँ हटाएं। 'source' एक वेक्टर है जहां सोर्स कोड की i-वीं लाइन source[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;", "}"]
लाइन दर लाइन कोड इस प्रकार है:
/*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;","}"]
लाइन दर लाइन कोड इस प्रकार है:
int main() /// मुख्य फंक्शन {
    int a, b, c;
    a = b + c;
}

व्याख्या - स्ट्रिंग /* का अर्थ है एक मल्टीलाइन टिप्पणी, जिसमें लाइन 1 और लाइन 6-9 शामिल हैं। स्ट्रिंग // लाइन 4 को टिप्पणी के रूप में दर्शाता है।

इस प्रॉब्लम को हल करने का दृष्टिकोण

  • हम एक आदर्श कंपाइलर की तरह स्ट्रिंग को लाइन दर लाइन पार्स करेंगे। जब हम // या '/*' का सामना करेंगे तो हम इन ब्लॉक कोट्स के बीच और बाद के सभी वर्णों को नजरअंदाज कर देंगे।

  • एक फंक्शन removeString(vector<string>& source) सोर्स कोड को इनपुट के रूप में लेता है और उसकी टिप्पणियाँ हटाने के बाद कोड लौटाता है।

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

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

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

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

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

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

  • एल्गोरिदम O(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 = {"/*Test program */", "int main()", "{ ", " // variable declaration ", "int a, b, c;", "/* 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;","}"]
लाइन दर लाइन कोड इस प्रकार है:
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++ का उपयोग करके स्ट्रिंग से दिए गए शब्द को हटाना

    इस लेख में, हम दिए गए स्ट्रिंग से दिए गए शब्द को हटाने की समस्या को हल करेंगे। उदाहरण के लिए: इनपुट: str = remove a given word, word = remove आउटपुट: a given word इनपुट: str = god is everywhere, word = is आउटपुट: god everywhere समाधान खोजने का दृष्टिकोण उदाहरण के लिए, हम स्ट्रिंग से एक शब्द को हट

  1. C++ में स्ट्रिंग के सबस्ट्रिंग्स की संख्या निकालना C++ में स्ट्रिंग के सबस्ट्रिंग्स की संख्या निकालना

    इस लेख में, आप एक दी गई स्ट्रिंग में बनने वाले सबस्ट्रिंग्स (गैर-खाली) की संख्या निकालने के दृष्टिकोण के बारे में जानेंगे।इनपुट: string = moon आउटपुट: 10 व्याख्या: सबस्ट्रिंग्स हैं m, o, o, n, mo, oo, on, moo, oon और moon। इनपुट: string = yellow आउटपुट: 21समाधान खोजने का दृष्टिकोणमान लें स्ट्रिंग की