เมื่อได้รับที่อยู่ IP ภารกิจคือการตรวจสอบที่อยู่ IP นี้และตรวจสอบว่าเป็น IPv6 หรือไม่ด้วยความช่วยเหลือของ ReGex (นิพจน์ทั่วไป) หากที่อยู่ IP ถูกต้อง ให้พิมพ์ "ที่อยู่ IPv6" ไม่เช่นนั้นให้พิมพ์ "ไม่ใช่"
ที่อยู่ IPv4 ที่ถูกต้องคือ IP ในรูปแบบ "XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX" โดยที่แต่ละหลัก Xi เป็นเลขฐานสิบหก ตัวอย่างเช่น
อินพุต-1 −
IP= “3001:0da8:82a3:0:0:8B2E:0270:7224”
ผลผลิต −
“Not”
คำอธิบาย − ที่อยู่นี้ไม่ใช่ที่อยู่ IPv6 ที่ถูกต้อง ให้ส่งคืน "ไม่"
อินพุต-2 −
IP= “2001:0db8:85a3:0000:0000:8a2e:0370:7334”
ผลผลิต −
“IPv6”
คำอธิบาย − นี่คือที่อยู่ IPv6 ที่ถูกต้อง ส่งคืน “IPv6”
แนวทางการแก้ปัญหานี้
เพื่อตรวจสอบว่าที่อยู่ IP ที่กำหนดเป็น IPv6 หรือไม่ เราใช้ ReGex ReGex คือนิพจน์ที่มีลำดับของอักขระที่กำหนดรูปแบบเฉพาะ รูปแบบเหล่านี้สามารถใช้ในอัลกอริทึมเพื่อให้ตรงกับรูปแบบในสตริง นอกจากนี้ยังใช้กันอย่างแพร่หลายสำหรับการตรวจสอบอินพุตด้วย
ข้อกำหนดช่วง − เราสามารถระบุตัวอักษรเพื่อสร้างรูปแบบในวิธีที่ง่ายที่สุด ในการระบุช่วงโดยใช้อักขระ เราสามารถใช้วงเล็บ '[ ]'
การระบุตัวละคร − นิพจน์ด้านบนระบุวงเล็บเปิดและตัวเลขในช่วง a ถึง z , 'A' ถึง 'Z' และ '0' ถึง '9' เป็นนิพจน์ทั่วไป
[a-z], [A-Z] and [0-9].
รูปแบบซ้ำ − ตัวแก้ไขนิพจน์อาจเป็น "+" ที่แนะนำให้จับคู่การเกิดขึ้นของรูปแบบอย่างน้อยหนึ่งครั้ง หรืออาจเป็น "*" ที่แนะนำให้จับคู่การเกิดขึ้นของรูปแบบเป็นศูนย์หรือมากกว่าครั้ง
นิพจน์ [a-z]* จะจับคู่กับสตริงว่าง
หากคุณต้องการระบุกลุ่มอักขระให้ตรงกันหนึ่งครั้งหรือมากกว่านั้น คุณสามารถใช้วงเล็บดังต่อไปนี้ −
[Abc]+
ต่อไปนี้คือแนวทางในการแก้ปัญหานี้
-
รับอินพุตสตริงที่ระบุที่อยู่ IP
-
ฟังก์ชันสตริง validIPAddress(string IP) รับที่อยู่ IP เป็นอินพุตและตรวจสอบว่าสตริงอินพุตถูกต้องหรือไม่ หากถูกต้อง ให้ส่งคืน “IPv6” มิฉะนั้น ให้ส่งคืน “Not an IP Address”
-
การสร้างรูปแบบ regex สำหรับที่อยู่ IPv6 เนื่องจากที่อยู่ IPv6 มี 8 ช่อง โดยแต่ละช่องจะมีตัวเลขของค่าที่แสดงเป็นเลขฐานสิบหก ที่อยู่ IPv6 จะดูเหมือน XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX คั่นด้วย "เครื่องหมายทวิภาค"
-
ที่อยู่ IPv6 ที่ถูกต้องอาจอยู่ในช่วง ([0-9a-fA-F]){1,4})\\:){7}([0-9a-fA-F]){1,4}) โดยหลักแรกจะอยู่ในช่วง 0-9 หลักที่สองคือตัวเลขและตัวเลขฐานสิบหก
-
ในทำนองเดียวกัน สำหรับฟิลด์ที่สอง อักขระตัวแรกจะอยู่ในช่วง 0-9a-fA-F ดังนั้นรูปแบบ regex จะเป็น '[0-9a-fA-F]'
ตัวอย่าง
#include<bits/stdc++.h> using namespace std; string validIPAddress(string IP) { regex ipv6("((([0-9a-fA-F]){1,4})\\:){7}([0-9a-fA-F]){1,4}"); if(regex_match(IP, ipv6)) return "IPv6"; else return "Not"; } int main(){ string IP= “3001:0da8:82a3:0:0:8B2E:0270:7224”; string ans= validIPAddress(IP); cout<<ans<<endl; return 0; }
ผลลัพธ์
การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น
Not
เนื่องจากที่อยู่ IP ที่ป้อนไม่ใช่ที่อยู่ IP ที่ถูกต้อง เราจะส่งคืน "ไม่"