shonrens написав:Betterthanyou написав:shonrens написав:Наприклад я ввів адресу 127.0.0.0, як я можу 127 зробити типом int?
Не знаю чи так правильно буде алей можна зробити структуру
struct IP
{
int field1,
field2,
field3,
field4;
};
...
IP ip1;
ip1.field1 = 127;
ip1.field2 = 0;
ip1.field3 = 0;
ip1.field4 = 0;
Або я не розумію або я не правильно задав питання.
Наприклад в мене є string str = "127"; Потрібно ip1.field = str;
наприклад так
#include <iostream>
#include <conio.h>
#include <string>
struct IP
{
private:
int field1,
field2,
field3,
field4;
public:
IP(std::string str);
void PrintIP();
bool operator== (IP ip);
void IpToInt(int *ip_field1, int *ip_field2, int *ip_field3, int *ip_field4);
};
IP::IP(std::string str = "0.0.0.0")
{
std::string strcpy;
int size = str.length();
for (int i = 0, j = 0; i < size; i++)
{
if (str[i] != '.')
{
strcpy += str[i];
}
if (str[i] == '.' || i + 1 == size)
{
if (j == 0)
field1 = atoi(strcpy.c_str());
else if (j == 1)
field2 = atoi(strcpy.c_str());
else if (j == 2)
field3 = atoi(strcpy.c_str());
else if (j == 3)
field4 = atoi(strcpy.c_str());
j++;
strcpy = "";
}
}
if (field1 > 255 || field2 > 255 || field3 > 255 || field4 > 255)
{
field1 = 0, field2 = 0, field3 = 0, field4 = 0;
std::cout << "Error! maximum ip 255.255.255.255" << std::endl;
}
}
bool IP::operator== (IP ip)
{
if (field1 == ip.field1 && field2 == ip.field2 && field3 == ip.field3 && field4 == ip.field4)
return true;
else
return false;
}
void IP::PrintIP()
{
std::cout << field1 << " " << field2 << " " << field3 << " " << field4 << std::endl;
}
void IP::IpToInt(int *ip_field1, int *ip_field2, int *ip_field3, int *ip_field4)
{
*ip_field1 = field1;
*ip_field2 = field2;
*ip_field3 = field3;
*ip_field4 = field4;
}
int main()
{
std::string str = "255.255.255.255";
std::cout << "--Initialization ip--" << std::endl << std::endl;
IP ip1 = str;
IP ip2 = (std::string)"127.0.0.0";
IP ip3 = (std::string)"192.168.0.01";
IP ip4 = (std::string)"255.00.255.255";
IP ip5 = (std::string)"255.255.255.256";
std::cout << "--Print ip--" << std::endl << std::endl;
ip1.PrintIP();
ip2.PrintIP();
ip3.PrintIP();
ip4.PrintIP();
ip5.PrintIP();
std::cout << "--Comparison ip--" << std::endl << std::endl;
std::cout << ((ip2 == ip5) ? "true" : "false") << std::endl;
int var1, var2, var3, var4;
std::cout << "--IpToInt ip--" << std::endl << std::endl;
ip2.IpToInt(&var1, &var2, &var3, &var4);
std::cout << var1 << " " << var2 << " " << var3 << " " << var4;
getch();
return 0;
}
--Initialization ip--
тут йде присвоєння IP структурі якщо воно більше за 255.255.255.255 виходить відповіде повідомлення про помилку
--Print ip--
тут виведення IP (там можна замінити " " на "." якщо потрібно через крапку)
--Comparison ip--
приклад порівняння Ip (Лише == , доробите по аналогії)
--IpToInt ip--
переведення ip в int (також можна так IP("255.60.255.255").IpToInt(&var1, &var2, &var3, &var4); тобто без створення об'єкта)
звичайно її потрібно дороблювати, ну я думаю ви зрозуміли мою ідею