Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
ElemeNT
1 / 1 / 0
Регистрация: 27.10.2008
Сообщений: 25
#1

Программа с мак адресом - C++

15.12.2008, 07:53. Просмотров 1164. Ответов 3
Метки нет (Все метки)

Написать программу приводящую введенный мак адрес к следующему виду: GG:GG:GG:GG:GG:GG. Где GG это 16 ричное число записанное в верхнем регистре с ведущим нулем. Пример AA:1F:14:10:05:F3. Пользователь может вводить мак адрес маленькими буквами, без разделителей с несколькими разделиткелями и т.д. Пример: “aa 1f 7F 45 12 81”, “aa^ bf^a3 ^ F8 ^ 5C ^4D”, “aabb1fa56790”.
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
46
47
48
49
50
51
52
53
54
55
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h> 
#include <string.h> 
#include <ctype.h> 
 
const int kol=1000;                                                 //введенная строка
const int max=17;                                                   //результирующая строка
 
int g(int i)
{
switch(i)
{ case 1:
      printf("Ne videlilas' pamyat'\n");  break;
   case 2:
      printf("Ne dostatochno simvolov\n");  break;
   case 3:
      printf("this is not mac adress\n");  break;
     
}     
system ("pause");                                                   //пауза
return(i);     
};
 
int main (void)                                                     // мэйн - стандартная функция, войд - передает параметр
{
int i,j;                                                            // i-счетчики, j-счетчики
char* s,* res;                                                      // s-строка, res-строка с результатом
 
s=(char*)malloc(sizeof(char)*kol);                                  //выделение оперативной памяти 
if (s==NULL) return(g(1));
res=(char*)malloc(sizeof(char)*(max+1));                            //выделение оперативной памяти 
if (res==NULL) return(g(1));
printf("Vvedite mac adress\n");                                     // вывод сообщения
gets(s); 
                                                          // ввод строки
for(i=0,j=0;s[i]!='\0'&& j<max;i++) {                               // создаем цикл
   if (isxdigit(s[i])) res[j++]=s[i];
   if (j==2|| j==5 ||j==8 ||j==11 ||j==14) res[j++]=':';            //через каждые два элемента проставляем двоеточие
   };
                                  
res[j]='\0';                                                        // обнуляем 
if (j<max) return(g(2));                                            //недостаточная длина строки
 
 
strupr(res);                                                        // перевод в верхний регистр
printf("Resultat %s\n",res);                                        // вывод ответа
 
 
system ("pause");                                                   // ждем нажатия любой клавиши
free(res);                                                          // ощищение памяти
free(s);                                                            // ощищение памяти
return 0;                                                           // завершение программы 
};
Как сделать так что если мы вводим больше 17букв или цифр(не символов) то программа передаст значение свитчу под номером 3
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2008, 07:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Программа с мак адресом (C++):

Программа, которая определяет, является ли заданная строка правильным IP-адресом
Здравствуйте! Вот задание В сети интернет каждому компьютеру присваивается...

Работа с ip-адресом
Каким образом можно работать с последним октантом ip-адреса. То есть считывать...

Является ли заданная строка правильным IP-адресом
В сети интернет каждому компьютеру присваивается четырехбайтовый код, который...

Как инициализировать указатель произвольным адресом?
Как инициализировать указатель произвольным адресом? int *ptr; ptr = ? ;...

Является ли данная строка действительным IP-адресом
Для того, чтобы получить доступ в Интернет, каждый компьютер назначен так...

Выявление такого же ай-пи/мак адреса
Усем здрасти!) имеется необходимость написать приложение, которое, бы...

3
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
16.12.2008, 01:12 #2
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
#include <stdio.h>
#include <ctype.h>
 
#define MAXLINE    1000    /* максимальная длина строки */
#define NSECTIONS  6       /* максимальное количество секций */
 
/* приводит введенный мак адрес к следующему виду: GG:GG:GG:GG:GG:GG */
main()
{
    char line[MAXLINE], tmp[3];
    int i, nsec;
    
    for (i = 0, nsec = 0, line[0] = '\0'; nsec != NSECTIONS; i++) {
        scanf("%*[^0-9a-fA-F]");
        if (scanf("%2s", tmp) != 1)
            break;
        tmp[0] = toupper(tmp[0]);
        tmp[1] = toupper(tmp[1]);
        if (isxdigit(tmp[0]) && isxdigit(tmp[1])) {
            nsec++;
            sprintf(line, "%s%s%s", line, tmp, nsec != NSECTIONS ? ":" : "");
        }    
    }    
    if (nsec == NSECTIONS)
        printf("%s\n", line);
    return 0;
}
update:
работает теперь для строк
23 &4a $234,bd .23.asdf23 &4a $234,bd .23.asdf
1
ElemeNT
1 / 1 / 0
Регистрация: 27.10.2008
Сообщений: 25
17.12.2008, 18:54  [ТС] #3
accept ты можешь мне подсказать как в моей проге(код выше) сделать так чтоб можно было вводить несколько корявых строк и чтоб прога преобразовывала в нормальный мак адресс притом это все выводилось в файле не в одной строке, через \n
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
17.12.2008, 22:28 #4
C
1
2
3
4
5
6
7
8
9
10
11
    gets(s);    // вместо этого fgets(s, sizeof(char)*kol, stdin)
 
    for(i = 0, j = 0; s[i] != '\0' && j < max; i++) {
        if (isxdigit(s[i]))
            res[j++] = s[i];
        if (j == 2 || j==5 || j==8 || j==11 || j==14)
            res[j++]=':';
    }
    res[j] = '\0';
    if (j < max)
        return(g(2));
зациклить это, в конце файла (в том числе и stdin) s станет равно NULL

Как сделать так что если мы вводим больше 17букв
проверить оставшуюся часть строки (прекратив запись, можно было бы и писать дальше, если бы память была) если в ней встречается хоть один isxdigit то это уже не адрес
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2008, 22:28
Привет! Вот еще темы с решениями:

Метод Квайна-Мак'Класки
Пишу программу для нахождения Fmin и сталкиваюсь с тем, что не знаю, как найти...

Нахождение мин и мак в матрицах
Есть две матрицы, в них найти и напечатать значения и индексы максимальных по...

Подскажите, как преобразовать строку с IP адресом в число и обратно
Есть IP адрес в std::string &quot;192.168.1.1&quot;, нужно преобразовать его в число, а...

очень тяжело,метод квайна-мак-класки
Поиск минимальной конъюнктивный нормальной формы булевой функции (случай...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru