एक IP एड्रेस दिया गया है, कार्य इस IP एड्रेस को मान्य करना और ReGex (रेगुलर एक्सप्रेशन) की मदद से जांचना है कि यह IPv4 है या नहीं। यदि IP एड्रेस मान्य है तो "IPv4 एड्रेस" प्रिंट करें अन्यथा "नहीं" प्रिंट करें।
एक मान्य IPv4 एड्रेस "X1.X2.X3.X4" फॉर्म में एक IP है जहां 0 <= Xi <= 255 और Xi में लीडिंग जीरो नहीं हो सकते। उदाहरण के लिए, "192.168.1.1" और "192.168.1.0" मान्य IPv4 एड्रेस हैं लेकिन "192.168.01.1", जबकि "192.168.1.00" और "192.168@1.1" अवैध IPv4 एड्रेस हैं। उदाहरण के लिए,
इनपुट-1 -
IP= "172.15.254.2"
आउटपुट -
"IPv4"
व्याख्या - यह मान्य IPv4 एड्रेस है, "IPv4" लौटाएं।
इनपुट-2 -
IP= "312.25.12.1"
आउटपुट -
"नहीं"
व्याख्या - यह मान्य IPv4 एड्रेस नहीं है, "नहीं" लौटाएं।
इस समस्या को हल करने का दृष्टिकोण
यह जांचने के लिए कि दिया गया IP एड्रेस IPv4 है या नहीं, हम ReGex का उपयोग करते हैं। ReGex एक एक्सप्रेशन है जिसमें कैरेक्टर्स का एक क्रम होता है जो एक विशिष्ट पैटर्न को परिभाषित करता है। इन पैटर्न का उपयोग स्ट्रिंग में पैटर्न मिलान करने के लिए एल्गोरिदम में किया जा सकता है। यह इनपुट वैलिडेशन के लिए भी व्यापक रूप से उपयोग किया जाता है।
रेंज स्पेसिफिकेशन - हम पैटर्न बनाने के लिए कैरेक्टर्स को सबसे सरल तरीके से निर्दिष्ट कर सकते हैं। कैरेक्टर्स का उपयोग करके रेंज निर्दिष्ट करने के लिए, हम '[ ]' ब्रैकेट्स का उपयोग कर सकते हैं।
कैरेक्टर्स निर्दिष्ट करना - उपरोक्त एक्सप्रेशन एक ओपनिंग ब्रैकेट और a से z की रेंज में एक अंक, 'A' से 'Z', और '0' से '9' को रेगेक्स के रूप में इंगित करता है। [a-z], [A-Z] and [0-9].
रिपीटेड पैटर्न्स - एक एक्सप्रेशन मॉडिफायर "+" हो सकता है जो पैटर्न की घटना को एक या अधिक बार मिलान करने का सुझाव देता है या यह "*" हो सकता है जो पैटर्न की घटना को शून्य या अधिक बार मिलान करने का सुझाव देता है।
एक्सप्रेशन [a-z]* एक ब्लैंक स्ट्रिंग से मिलान करेगा।
यदि आप कैरेक्टर्स के एक समूह को एक या अधिक बार मिलान करने के लिए निर्दिष्ट करना चाहते हैं, तो आप निम्नानुसार पैरेंथेसिस का उपयोग कर सकते हैं -
[Abc]+
इस समस्या को हल करने का दृष्टिकोण निम्नलिखित है,
- एक स्ट्रिंग इनपुट लें जो IP एड्रेस निर्दिष्ट करती है।
- एक स्ट्रिंग फ़ंक्शन validIPAddress(string IP) IP एड्रेस को इनपुट के रूप में लेता है और जांचता है कि इनपुट स्ट्रिंग मान्य है या नहीं। यदि यह मान्य है तो "IPv4" लौटाएं अन्यथा "नॉट एन IP एड्रेस" लौटाएं।
- IPv4 एड्रेस के लिए एक रेगेक्स पैटर्न बनाएं। चूंकि IPv4 एड्रेस में 4 फील्ड होते हैं जिनमें प्रत्येक फील्ड में 0-255 की रेंज में वैल्यू होती है। IPv4 एड्रेस XXX.XXX.XXX.XXX जैसा दिखता है।
- एक मान्य IPv4 एड्रेस (([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3} रेंज में हो सकता है जिसमें पहला अंक 0-9 की रेंज में होगा, दूसरा 1-9 और तीसरा अंक 0-9 की रेंज में होगा।
- इसी तरह, दूसरे फील्ड के लिए पहला कैरेक्टर 100-199 की रेंज में होगा, इस प्रकार रेगेक्स पैटर्न '1[0-9]-0-9]' होगा।
- अगले फील्ड के लिए, अंक 200-249 की रेंज में होगा। इस प्रकार रेगेक्स पैटर्न '2[0-4][0-9]' होगा जो सुनिश्चित करता है कि रेंज 255 से अधिक अंक न हो।
- अंतिम जो अगला फील्ड है उसमें 250-255 की रेंज में अंक होते हैं इस प्रकार रेगेक्स पैटर्न 25[0-5] होगा।
उदाहरण
#include<bits/stdc++.h>
using namespace std;
string validIPAddress(string IP) {
regex ipv4("(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])");
if(regex_match(IP, ipv4))
return "IPv4";
else
return "Not";
}
int main(){
string IP= "172.16.254.1";
string ans= validIPAddress(IP);
cout<<ans<<endl;
return 0;
}
आउटपुट
उपरोक्त कोड चलाने से आउटपुट इस प्रकार उत्पन्न होगा,
IPv4
चूंकि इनपुट IP एड्रेस मान्य IP एड्रेस है, हम "IPv4" लौटाएंगे।