Форум программистов, компьютерный форум CyberForum.ru

Проверка на IP-адрес - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
Fleurgen
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 20
14.12.2010, 23:31     Проверка на IP-адрес #1
Написать программу - Проверить является ли введенная строка IP адресом
Фишка в том, что нужно пускать на проверку с использованием
strpos для нахождения подстроки меду точками,
isnum чтобы проверить цифры,
atoi чтобы исключить лишнее

никак не могу реализовать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2010, 23:31     Проверка на IP-адрес
Посмотрите здесь:

IP-адрес! C++
Адрес функции C++
Адрес объекта. C++
C++ Адрес функции
C++ Адрес
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.12.2010, 10:35     Проверка на IP-адрес #2
есть strtol(), у неё есть возможность узнать, где она остановилась
Fleurgen
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 20
15.12.2010, 15:25  [ТС]     Проверка на IP-адрес #3
Понятно. Но как это реализовать? На примере. Я в си недавно начал изучать.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
15.12.2010, 16:01     Проверка на IP-адрес #4
слегка по быдлокодерски, но общий смысл должен быть понятен:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
#include<cstdlib>
int main(){
    char IP[16];
    char* endptr;
    long int a;
    std::cout<<"Enter string: ";
    std::cin>>IP;
    if(a=strtol(IP,&endptr,10))
        if(a>=0&&a<=255){
            int i;
            for(i=0;i<3;i++){
                ++endptr;
                if(!(a=strtol(endptr,&endptr,10))||!(a>=0&&a<=255)){
                    std::cout<<"String is not IP";
                    break;
                }
            }
        if(i<3)
            std::cout<<"String is not IP";
        else 
            std::cout<<"String is IP";
        }
        else
            std::cout<<"String is not IP";
    else 
        std::cout<<"String is not IP";
    std::cout<<std::endl;
    return 0;
}
Добавлено через 2 минуты

Не по теме:

что-то в Notepad++ нормальные отступы были, а на форуме вон какие получились...

silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.12.2010, 16:24     Проверка на IP-адрес #5
Kastaneda, где нибудь в настройках стоит галочка "Использовать табуляцию" или что-то в этом роде. Если убрать её, табуляция будет заменяться на пробелы и во всех программах отступ будет такой, какой был изначально.
Kastaneda
15.12.2010, 16:33
  #6

Не по теме:

да, есть чекбокс "заменить пробелами"

Fleurgen
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 20
15.12.2010, 19:49  [ТС]     Проверка на IP-адрес #7
спасибо,конечно. но теперь фишка самая в чем.
мы вводим произвольный адрес,число и т.д. и программа должна отсортировать лишние символы кроме точки(мы ее не вводим), и буквы, оставляя только числа. а при вводе готового ип адреса автоматически должен проставлять точки между адресами
для этого я и прописал вышеуказанные функции.

p.s. програмка у меня работала некорректно, при вводе адреса 127.0.0.0 писала чти не п. доработал. хороша но не то...
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
15.12.2010, 21:23     Проверка на IP-адрес #8
А почему программа выдает ошибку: "String is not IP", когда я ввожу например:
192.168.1.1 255.255.255.0
Fleurgen
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 20
15.12.2010, 21:55  [ТС]     Проверка на IP-адрес #9
Код
#include<iostream>
#include<cstdlib>
#include<cstdio>

int main()
{
        char IP[16];
        char* endptr;
        long int a;
        printf("Enter string: ");
        gets(IP);
        if(a=strtol(IP,&endptr,10))
                if(a>=0&&a<=255)
				{
                        int i;
                        for(i=0;i<3;i++)
						{
                                ++endptr;
                                if(!(a=strtol(endptr,&endptr,10))||!(a>=0&&a<=255))
								{
                                        printf("String is not IP");
                                        break;
                                }
                        }
                if(i<3)
                        printf("String is not IP");
                else 
                        printf("String is IP");
                }
                else
                        printf("String is not IP");
        else 
                printf("String is not IP");
		system ("pause");
        return 0;
}
вот так работает
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
15.12.2010, 22:05     Проверка на IP-адрес #10
Спасибо супер все работает как надо!!!
Fleurgen
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 20
15.12.2010, 22:12  [ТС]     Проверка на IP-адрес #11
хех. не за что. ))
кто бы мне помог

Добавлено через 1 минуту
Вот еще мой предыдущий код. Но тоже не тот который нужен


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
   int a[15];                           // вводим строки
      char t1, t2, t3;                  // вводим обозначения для точек между строками
      printf("Vvedite predpolagaemii adres: ");
         scanf("%i%c%i%c%i%c%i", &a[0], &t1, &a[1], &t2, &a[2], &t3, &a[3]); //сканируем присваиваемые значения
                 if (a[0]>=0 && a[0]<=255 &&                                 // задаем условие
                     a[1]>=0 && a[1]<=255 &&                                 // для ограничения адреса
                     a[2]>=0 && a[2]<=255 && 
                     a[3]>=0 && a[3]<=255 && 
                     t1 == '.' && 
                     t2 == '.' && 
                     t3 == '.')
                  printf ("DA, ETO IP\n");                              //если условие выполняется то это адрес
            else 
            printf("Net! Eto Nepravda!\n");                             // если нет, то это не адрес
     system ("pause");
   return 0;
}
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
16.12.2010, 09:20     Проверка на IP-адрес #12
Цитата Сообщение от isaak Посмотреть сообщение
А почему программа выдает ошибку: "String is not IP", когда я ввожу например:
192.168.1.1 255.255.255.0
потому, что этот код просто для примера, чтоб показать как работать с strtol(), там еще много нюансов не учтено.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2010, 10:14     Проверка на IP-адрес
Еще ссылки по теме:

C++ Адрес объекта, адрес указателя. Где что находится?
C++ IP адрес
IP Адрес компьютера C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.12.2010, 10:14     Проверка на IP-адрес #13
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
 
int func(const char *s);
 
int main(void)
{
    const char *sa, *sb;
    
    sa = "127.0.0.1";
    sb = "0.0.0.0";
    
    if (func(sa))
        printf("sa: %s" "\n", sa);
    if (func(sb))
        printf("sb: %s" "\n", sb);
    
    return 0;
}
 
#include <stdlib.h>
#include <ctype.h>
 
int func(const char *s)
{
    char *p;
    int i, n;
    
    for (i = 0; i < 4; i++) {
        if (!isdigit((unsigned char) *s))
            return 0;
        n = strtol(s, &p, 10);
        if (n < 0 || n > 255)
            return 0;
        if (i + 1 < 4 && *p != '.')
            return 0;
        s = p + (i + 1 < 4);
    }
    return *s == '\0';
}
Код
[guest@localhost tests]$ ./t
sa: 127.0.0.1
sb: 0.0.0.0
[guest@localhost tests]$
Добавлено через 4 минуты
там ещё переполнение проверять можно
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
 
int func(const char *s);
 
int main(void)
{
    const char *sa, *sb;
    
    sa = "1111111111111.0.0.1";
    sb = "0.0.0.0";
    
    if (func(sa))
        printf("sa: %s" "\n", sa);
    if (func(sb))
        printf("sb: %s" "\n", sb);
    
    return 0;
}
 
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
 
int func(const char *s)
{
    char *p;
    int i, n;
    
    for (i = 0; i < 4; i++) {
        if (!isdigit((unsigned char) *s))
            return 0;
        n = strtol(s, &p, 10);
#if 1
        printf("%d %d" "\n", n, errno);
        if (errno)
            perror("");
#endif
        if (n < 0 || n > 255)
            return 0;
        if (i + 1 < 4 && *p != '.')
            return 0;
        s = p + (i + 1 < 4);
    }
    return *s == '\0';
}
Код
[guest@localhost tests]$ ./t
2147483647 34
Numerical result out of range
0 34
Numerical result out of range
0 34
Numerical result out of range
0 34
Numerical result out of range
0 34
Numerical result out of range
sb: 0.0.0.0
[guest@localhost tests]$
Yandex
Объявления
16.12.2010, 10:14     Проверка на IP-адрес
Ответ Создать тему
Опции темы

Текущее время: 22:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru