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

С++ для начинающих

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

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

15.12.2008, 07:53. Просмотров 1089. Ответов 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”.


Код
#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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2008, 07:53     Программа с мак адресом
Посмотрите здесь:

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

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

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

Как инициализировать указатель произвольным адресом? - C++
Как инициализировать указатель произвольным адресом? int *ptr; ptr = ? ; // КАК ЭТО СДЕЛАТЬ?

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.12.2008, 01:12     Программа с мак адресом #2
Код
#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
ElemeNT
1 / 1 / 0
Регистрация: 27.10.2008
Сообщений: 25
17.12.2008, 18:54  [ТС]     Программа с мак адресом #3
accept ты можешь мне подсказать как в моей проге(код выше) сделать так чтоб можно было вводить несколько корявых строк и чтоб прога преобразовывала в нормальный мак адресс притом это все выводилось в файле не в одной строке, через \n
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2008, 22:28     Программа с мак адресом
Еще ссылки по теме:

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

очень тяжело,метод квайна-мак-класки - C++
Поиск минимальной конъюнктивный нормальной формы булевой функции (случай зависимости функции от 4 переменных) по методу Квайна-Мак-Класки

Исправить ошибки в работе метода Квайна Мак'Класки - C++
Пишу программу по методу Квайна Мак'Класки, программа работает не верно, не могу понять почему #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; ...

Проблема с IP адресом - Windows Server
Здравствуйте, Сервер 2008 R2. Пинг самого себя дает такой результат: Я не системный администратор, а программист 1С. Дело...


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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.12.2008, 22:28     Программа с мак адресом #4
Код
    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 то это уже не адрес
Yandex
Объявления
17.12.2008, 22:28     Программа с мак адресом
Ответ Создать тему
Опции темы

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