fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. enum IP_family {
  5. addr_IPv4,
  6. addr_IPv6,
  7. addr_unknown
  8. };
  9.  
  10. const char *to_string (IP_family f) {
  11. switch (f) {
  12. case addr_IPv6:
  13. return "IPv6";
  14. case addr_IPv4:
  15. return "IPv4";
  16. default:
  17. return "unknown";
  18. }
  19. }
  20.  
  21. IP_family addr_type (const string &addr) {
  22. if (addr.find_first_of (':') != string::npos)
  23. return addr_IPv6;
  24. if (addr.find_first_of ('.') != string::npos)
  25. return addr_IPv4;
  26. return addr_unknown;
  27. }
  28.  
  29. ostream &operator<< (ostream &os, IP_family f) {
  30. return os << to_string (f);
  31. }
  32.  
  33. void test (const string &str) {
  34. cout << "\"" << str << "\" is " << addr_type(str) << endl;
  35. }
  36.  
  37. int main() {
  38. test ("46.227.16.8");
  39. test ("2a01:6e00:10:410::2");
  40. test ("42");
  41. return 0;
  42. }
  43.  
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
"46.227.16.8" is IPv4
"2a01:6e00:10:410::2" is IPv6
"42" is unknown