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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
e73t4ph
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 34
#1

функция проверки правильности написания адреса почты (под DevC++ - C++

22.05.2012, 23:04. Просмотров 1282. Ответов 9
Метки нет (Все метки)

Написать функцию проверки правильности написания адреса почты. Функция возвращает указатель на
переданную в неё строку с адресом почты, если адрес почты написан правильно, иначе возвращает NULL.
char * email_validator(int email_length, char * email)

нужно скомпилировать на DevC++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2012, 23:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос функция проверки правильности написания адреса почты (под DevC++ (C++):

функция проверки правильности написания адреса почты - C++
Написать функцию проверки правильности написания адреса почты. Функция возвращает указатель на переданную в неё строку с адресом почты,...

Разработать программу, которая вводит адрес электронной почты и проверяет синтаксис введенного адреса. Результат проверки выводится в виде сообщения - C++
Дефис в доменном имени может быть только одиночным. Например, недопустим адрес: p_pg@m12.i--t.pochta.ru # include <iostream.h> ...

Функция для проверки почтового адреса - C++
Мне нужно написать функцию, которая проверяет правильно ли введен почтовый адрес. Условий корректности много. Например, символ "точка" не...

о правильности написания - C++
Всем привет! Есть неясности: Имеем функцию: void foo(int* i); Как правильнее ее описать и вызывать? В книгах выдел 2...

Программа проверки правильности скобок - C++
Написать программу которая определит правильно ли расставлены скобки (,) в выражении . Например (222-(2*Х+5))-3*у). Никак не могу понять((

последовательность (1+R)/(1+S) под DevC++ - C++
Даны n, последовательность n x , x ,...x 1 2 . Получить (1+R)/(1+S), где R – сумма тех членов последовательности, которые не превосходят...

9
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.05.2012, 23:45 #2
можно попробовать регулярные выражения заюзать. если DevC++ их поддерживает, то вся задачка сводится в нахождению в сети правильного выражения. вот я первое попавшееся заиспользовал:

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
#include <string>
#include <regex>
#include <iostream>
 
bool IsEmail(const std::string& str)
{
  const std::regex emailRegEx("^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4})$");
  return std::regex_search(str, emailRegEx);
}
 
void Check(const std::string& str)
{
  const bool isEmail = IsEmail(str);
  if (isEmail)
    std::cout << str << " is correct email" << std::endl;
  else
    std::cout << str << " is not email" << std::endl;
}
 
int main()
{
  Check("xxx.yyy@zzz.ru");
  Check("xxx@zzz.ru");
  Check("xxx.yyy.zzz");
  return 0;
}
руками все емейлы распознать будет сложно, в сети я видел достаточно большие выражения, и по идее самодельный код должен делать все те же самые проверки, которые закодированы в регекспе.
0
e73t4ph
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 34
22.05.2012, 23:59  [ТС] #3
ругается на

const std::regex emailRegEx("^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4})$");
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.05.2012, 00:02 #4
а на
#include <regex> не ругается чтоли?
если не ругается, то возможно поддержка регулярных выражений все таки есть, только они в пространстве имет std::tr1. попробуйте
const std::tr1::regex emailRegEx("^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4})$");
если не прокатит, то не повезло
а если прокатит, то перед regex_search тоже std::tr1::
0
e73t4ph
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 34
23.05.2012, 00:07  [ТС] #5
с tr1 все равно ругается. а можно ли заменить функцию std:: на какую нить более простую?
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.05.2012, 00:13 #6
нет. эти штуки из нового стандарта с++. поэтому если DevC++ новый стандарт не поддерживает, то по простому задачка не решается. нужно или самому парсить строки и проверять их на правильность, или искать готовые библиотеки, которые умеют работать с регулярными выражениями. boost умеет например. короче придется искать.
0
e73t4ph
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 34
23.05.2012, 00:14  [ТС] #7
а какой программой можно скомпилировать этот код
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.05.2012, 00:23 #8
любой, которая поддерживает новый стандарт. точнее конкретно регекспы.
Visual Studtio 2010
Qt creator - до версии 4,7 ставился mingw компилятор, который вроде что-то умеет из новых фич. в какой-то версии это дело отключили и он начинал компилить все с помощью только студийного компилятора. ну с этим могу напутать. в общей или Qt creator или Visual Studio 2010. Может кто еще что-нибудь добавит или расскажет, можно ли в Dev C++ юзать с++ 0x
0
e73t4ph
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 34
23.05.2012, 20:37  [ТС] #9
И еще вопрос как будет выглядеть блок-схема к этому коду?

Добавлено через 20 часов 4 минуты
есть кто живой?
0
e73t4ph
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 34
29.05.2012, 23:30  [ТС] #10
C++ (Qt)
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
56
57
58
59
60
61
// email.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
 
 
using namespace std;
 
 
char * email_validator(int email_length, char * email) 
{
    static const char username[] = "abcdefghijklmnopqrstuvwxyz0123456789!#$%&'*+-//=?^_`{|}~.";
    static const char hostname[] = "abcdefghijklmnopqrstuvwxyz0123456789.";
    bool usernamePart = true;
    bool prevWasDot = false;
    int i, j;
 
    for (i = 0; i < email_length && email[i]; i ++)
    {
        if (usernamePart)
        {
            if (email[i] == '@') usernamePart = false;
            else
            {
                for (j = 0; username[j] && email[i] != username[j]; j ++);
                if (!username[j]) return NULL;
            }
        }
        else
        {
            for (j = 0; hostname[j] && email[i] != hostname[j]; j ++);
            if (!hostname[j]) return NULL;
        }
 
        if (email[i] == '@')
        {
            if (prevWasDot || !i || i + 1 == email_length || !email[i + 1] || email[i + 1] == '.') return NULL;
        }
 
        if (email[i] == '.')
        {
            if (prevWasDot || !i || i + 1 == email_length || !email[i + 1]) return NULL;
            prevWasDot = true;
        }
        else prevWasDot = false;
    }
 
    return ((usernamePart) ? NULL : email);
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    char email[256] = "";
    cout << "E-mail: ";
    cin >> email;
    if (email_validator(sizeof(email) - 1, email) != NULL) cout << "OK" << endl;
    else cout << "WRONG" << endl;
    return 0;
}
ошибка в строчке int _tmain(int argc, _TCHAR* argv[])

как ее исправить?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2012, 23:30
Привет! Вот еще темы с ответами:

Добавить в программу функцию проверки правильности ввода даты - C++
Всем привет, есть программа на C++, которая подсчитывает количество дней, прошедших между двумя датами. Помощи прошу в том, чтобы...

Найти баг в простой функции проверки правильности скобок - C++
Привет! Проходил онлайн тест, нужно было в очень ограниченное время без IDE (форма фиксирует активность, копипаста из IDE не прокатит)...

Небольшой шаблонный класс matrix: комментарии/критика относительно кода с точки зрения правильности написания - C++
В плане своего общего развития написал не большой шаблонный класс matrix. Хочу поделиться своей работой с остальными, - может кому то это...

Разработать программу, которая вводит адрес электронной почты и проверяет синтаксис введенного адреса - C++
В имени пользователя могут быть только следующие символы: буквы латинского алфавита, цифры, дефис (-), подчеркивание (_), точка (.),...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
29.05.2012, 23:30
Ответ Создать тему
Опции темы

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