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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
ElemeNT
1 / 1 / 0
Регистрация: 27.10.2008
Сообщений: 25
15.12.2008, 07:53     Программа с мак адресом #1
Написать программу приводящую введенный мак адрес к следующему виду: 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-адресом C++
Метод Квайна-Мак'Класки C++
C++ очень тяжело,метод квайна-мак-класки
Как инициализировать указатель произвольным адресом? C++
Подскажите, как преобразовать строку с IP адресом в число и обратно C++
C++ Является ли заданная строка правильным IP-адресом
C++ Нахождение мин и мак в матрицах
Исправить ошибки в работе метода Квайна Мак'Класки C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 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
accept
4838 / 3237 / 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     Программа с мак адресом
Ответ Создать тему
Опции темы

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