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

C++ में IP पतों को पुनर्स्थापित करें

मान लीजिए कि हमारे पास एक स्ट्रिंग है जिसमें केवल अंक हैं, हमें सभी संभावित मान्य आईपी एड्रेस संयोजनों को वापस करके इसे पुनर्स्थापित करना होगा। हम जानते हैं कि एक वैध आईपी पते में ठीक चार पूर्णांक होते हैं (प्रत्येक पूर्णांक 0 से 255 की सीमा में होता है) एकल बिंदुओं द्वारा अलग किया जाता है।

इसलिए, यदि इनपुट "25525511135" जैसा है, तो आउटपुट ["255.255.11.135", "255.255.111.35"]

होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक फ़ंक्शन को परिभाषित करें ConvertToNum(), इसमें s, start, end,

    . लगेगा
  • संख्या :=0

  • प्रारंभ करने के लिए i:=प्रारंभ, जब मैं <=समाप्त होता हूं, अद्यतन करता हूं (मैं 1 से बढ़ाता हूं), करें -

    • संख्या:=(संख्या * 10) + (एस [i] - '0' का ASCII)

    • अगर संख्या> 255, तो -

      • 10000 लौटाएं

  • वापसी संख्या

  • फ़ंक्शन ऐडडॉट्स () को परिभाषित करें, यह स्थिति लेगा,

  • रेस :=खाली स्ट्रिंग

  • x :=0, posIndex :=0

  • इनिशियलाइज़ i :=0 के लिए, जब i <पोजीशन का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -

    • संख्या:=स्थिति[i]

    • एक स्ट्रिंग बनाएं str1

    • अस्थायी:=स्ट्रिंग के रूप में संख्या

    • रेस :=रेस + टेम्प

    • अगर मैं <पदों का आकार, तो -

      • res :=res concatenate "।"

  • रिटर्न रेस

  • एक फ़ंक्शन हल करें () को परिभाषित करें, यह s, एक स्ट्रिंग सरणी परिणाम, एक सरणी स्थिति, dotCount लेगा, यह इसे 3 के साथ प्रारंभ करता है, startIndex, यह इसे 0 से प्रारंभ करता है,

  • यदि डॉटकाउंट गैर-शून्य नहीं है और ((एस -1 का आकार - startIndex + 1) 1, तो -

    • अस्थायी :=ConvertToNum(s, startIndex, size of s)

    • अगर अस्थायी>=0 और अस्थायी <=255, तो−

      • पदों के अंत में अस्थायी डालें

      • रेस :=ऐडडॉट्स(पोजिशन)

      • यदि रेस का आकार s के आकार के समान है, तो -

        • परिणाम के अंत में रेस डालें

    • वापसी

  • इनिशियलाइज़ i के लिए:=startIndex, जब i

    • अस्थायी:=ConvertToNum(s, startIndex, i)

    • अगर अस्थायी>=0 और अस्थायी <=255, तो -

      • पदों के अंत में अस्थायी डालें

      • हल (एस, परिणाम, स्थिति, डॉटकाउंट -1, आई + 1)

      • पदों से अंतिम तत्व हटाएं

  • एक फ़ंक्शन को परिभाषित करें genIp यह एक स्ट्रिंग s लेगा,

  • एक सरणी परिणाम परिभाषित करें

  • एक सरणी स्थिति परिभाषित करें

  • हल करें(रों, परिणाम, स्थिति)

  • वापसी परिणाम

  • मुख्य विधि से कॉल करें genIp(A)

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
typedef long long int lli;
class Solution {
public:
   lli convertToNum(string s,int start, int end){
      lli num = 0;
      for (int i = start; i <= end; i++) {
         num = (num * 10) + (s[i] - '0');
         if (num > 255)
            return 10000;
      }
      return num;
}
string addDots(vector <int> positions){
   string res = "";
   int x = 0;
   int posIndex = 0;
   for (int i = 0; i < positions.size(); i++) {
      int num = positions[i];
      ostringstream str1;
      str1 << num;
      string temp = str1.str();
      res += temp;
      if (i < positions.size() - 1)
         res += ".";
   }
   return res;
}
void solve(string s, vector <string> &result,vector <int> positions, int dotCount = 3, int startIndex = 0){
   if (!dotCount && ((s.size() - 1) - startIndex + 1) >= 1) {
      int temp = convertToNum(s, startIndex, s.size() - 1);
      if (temp >= 0 && temp <= 255) {
         positions.push_back(temp);
         string res = addDots(positions);
         if (res.size() - 3 == s.size()) {
            result.push_back(res);
         }
      }
      return;
   }
   for (int i = startIndex; i < s.size(); i++) {
      int temp = convertToNum(s, startIndex, i);
      if (temp >= 0 && temp <= 255) {
         positions.push_back(temp);
         solve(s, result, positions, dotCount - 1, i + 1);
         positions.pop_back();
      }
   }
}
vector<string> genIp(string s){
   vector<string> result;
   vector<int> position;
   solve(s, result, position);
   return result;
}
vector<string> restoreIpAddresses(string A) {
   return genIp(A);
}};
main(){
   Solution ob;
   print_vector(ob.restoreIpAddresses("25525511135"));
}

इनपुट

"25525511135"

आउटपुट

[255.255.11.135, 255.255.111.35, ]

  1. स्विच स्टेटमेंट C++

    C++ में स्विच स्टेटमेंट का उपयोग कैसे करें सशर्त बयान सभी प्रोग्रामिंग भाषाओं की एक सामान्य विशेषता है। इन कथनों का उपयोग किसी प्रोग्राम के प्रवाह को नियंत्रित करने और यह निर्दिष्ट करने के लिए किया जाता है कि कोड के विशिष्ट ब्लॉक कब निष्पादित किए जाने चाहिए। C++ में उपयोग किए जाने वाले मुख्य कंडीश

  1. C++ में मितव्ययी संख्या

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया जाता है। हमारा कार्य यह जाँचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या - एक संख्या जिसके अंकों की संख्या दी गई संख्या के अभाज्य गुणनखंड में अंकों की संख्या से अधिक है। उदाहरण − 625, संख्या 625 का अभाज्

  1. सी++ पेंटाटोप नंबर

    पास्कल के त्रिभुज में एक पंचकोण संख्या को पाँचवीं संख्या के रूप में वर्णित किया गया है। अब, जैसा कि आप जानते हैं, यह पांचवीं संख्या है, तो इसका मतलब है कि हमारे पास पास्कल के त्रिकोण में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है। पास्कल त्रिभुज की