Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/64: Рейтинг темы: голосов - 64, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 20

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

14.12.2010, 23:31. Показов 12148. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать программу - Проверить является ли введенная строка IP адресом
Фишка в том, что нужно пускать на проверку с использованием
strpos для нахождения подстроки меду точками,
isnum чтобы проверить цифры,
atoi чтобы исключить лишнее

никак не могу реализовать
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2010, 23:31
Ответы с готовыми решениями:

Регулярные выражения: проверка на MAC-адрес
Привет всем! Изучаю с++, начал тему регулярные выражения, и немного не понятна эта тема, решил для себя реализовать пару задач, одна из...

Вычислить адрес верхушки стека, адрес следующей команды, адрес переменной, адрес которой содержится в BX
Помогите решить следующие задачи: 1.Вычислить адрес верхушки стэка. 2.Вычислить адрес следующей выполняемой программы. 3. Вычислить...

Проверка на повторный IP адрес
Добрый вечер! Решил сделать в коде проверку на IP адрес, смысл такой, если сегодня пользователь заполнил форму у него записался IP адрес,...

12
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
15.12.2010, 10:35
есть strtol(), у неё есть возможность узнать, где она остановилась
0
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 20
15.12.2010, 15:25  [ТС]
Понятно. Но как это реализовать? На примере. Я в си недавно начал изучать.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
15.12.2010, 16:01
слегка по быдлокодерски, но общий смысл должен быть понятен:
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++ нормальные отступы были, а на форуме вон какие получились...

0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
15.12.2010, 16:24
Kastaneda, где нибудь в настройках стоит галочка "Использовать табуляцию" или что-то в этом роде. Если убрать её, табуляция будет заменяться на пробелы и во всех программах отступ будет такой, какой был изначально.
1
15.12.2010, 16:33

Не по теме:

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

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

p.s. програмка у меня работала некорректно, при вводе адреса 127.0.0.0 писала чти не п. доработал. хороша но не то...
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,321
15.12.2010, 21:23
А почему программа выдает ошибку: "String is not IP", когда я ввожу например:
192.168.1.1 255.255.255.0
0
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 20
15.12.2010, 21:55  [ТС]
Code
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
#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;
}
вот так работает
1
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,321
15.12.2010, 22:05
Спасибо супер все работает как надо!!!
0
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 20
15.12.2010, 22:12  [ТС]
хех. не за что. ))
кто бы мне помог

Добавлено через 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;
}
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
16.12.2010, 09:20
Цитата Сообщение от isaak Посмотреть сообщение
А почему программа выдает ошибку: "String is not IP", когда я ввожу например:
192.168.1.1 255.255.255.0
потому, что этот код просто для примера, чтоб показать как работать с strtol(), там еще много нюансов не учтено.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
16.12.2010, 10:14
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';
}
Code
1
2
3
4
[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';
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
[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]$
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2010, 10:14
Помогаю со студенческими работами здесь

Проверка строки на IP адрес
Пишу клиент-серверную программу, получилось таким образом, что IP сервера на клиентской стороне имеется в строковом типе. Присваиваю его в...

Частный адрес, динамический адрес, статический адрес - какой у меня?
Привет. Открываем рубрику глупых вопросов. Я сижу с компьютера который подключен к интернету по кабелю, кабель от компьютера идёт к...

Функция возвращает адрес , как передать этот адрес другой функции ?
const int max = 5; double * fill_array(double, int); void show_array(const double, double *); // как передать этой функции в...

На одном из компьютеров адрес dhcp-сервера сменился на адрес компьютера другого сотрудника
Здравствуйте! Столкнулся с такой проблемой: на одном из компьютеров отвалился интернет, перво наперво решил посмотреть какой выдан ip...

Адрес объекта, адрес указателя. Где что находится?
#include &lt;iostream&gt; void Foo(int* val) { std::cout &lt;&lt; val &lt;&lt; &quot; &quot; &lt;&lt; *val &lt;&lt; &quot; &quot; &lt;&lt; &amp;val &lt;&lt; '\n'; } void Bar(int* &amp;val) ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru