С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 2
1

Проверить, является ли заданный e-mail корректным

25.02.2018, 14:49. Показов 2459. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Адрес электронной почты состоит из двух частей: имени пользователя и имени домена, разделённых символом @.

Будем считать имя пользователя корректным, если оно не пусто и состоит только из букв и/или цифр.

Будем считать имя домена корректным, если оно состоит из двух непустых последовательностей букв, разделённых точкой.

Проверьте, является ли заданный e-mail корректным.

Входные данные
Ввод содержит строку S (5 ≤ |S| ≤ 100), состоящую из строчных латинских букв, цифр, а также символов '@' и '.', — адрес электронной почты.

Выходные данные
Если адрес корректен, то в первой строке выведите содержащееся в нём имя пользователя, а во второй строке — имя домена.

Если адрес некорректен, в первой строке выведите NO.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2018, 14:49
Ответы с готовыми решениями:

Определить, является ли e-mail корректным
Дан email в строке. Определить, является ли он корректным(наличие символа @ и точки, наличие не...

Проверить, является ли заданный двумерный массив магическим квадратом
Проверить, является ли заданный двумерный массив магическим квадратом. (сумма чисел в каждой...

Строка: Проверить, является ли заданный символ буквой, числом или специальным символом?
Напишите программу, в которой пользователь должен ввести 1 символ. По окончанию программа должна...

Для каждого слова определить, является ли оно корректным именем
1. Вводится массив слов. Для каждого слова определить, является ли оно корректным именем (первая...

5
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
25.02.2018, 14:59 2
Лучший ответ Сообщение было отмечено danis355 как решение

Решение

Для кого-то уже делал, пригодится
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream>
#include <cstdlib>
#include <vector>
#include <cmath>
#include <string>
using namespace std;
 
int main(int argc, char *argv[])
{
    string s;
    cin >> s;
 
    int counter = 0;
    int smth  = 0;
    string str(s);
 
    int lol = str.find("@",0);
    if(str.find("@",lol+1) != s.npos || lol == s.npos){
        cout << "incorrect" << endl;
        return 0;
    }
 
    int kek = str.find(".",0);
 
    if(str.find(".",kek+1) != s.npos || kek == s.npos){
        cout << "incorrect" << endl;
        return 0;
    }
 
    counter = s.find("@",0);
    if(counter == 0 || counter == s.npos){
        cout << "incorect" << endl;
        return 0;
    }
 
    smth = s.find(".",0);
    if(smth <= counter+1 || smth == s.npos){
        cout << "incorect" << endl;
        return 0;
    }
 
    if(smth+1 == s.npos){
        cout << "incorect" << endl;
        return 0;
    }
 
    string s1,s2,s3;
    s3 = s;
    s1 = s3.erase(counter,s3.length());
 
    string bla_bla_bla = "{}][,;:?/|\*&^%$#()-_=+~`<>'";
 
    for(int i =0;i<s1.length();i++){
        for(int j = 0;j<bla_bla_bla.length();j++){
            if(s1.at(i) == bla_bla_bla.at(j)){
                cout << "incorect" << endl;
                return 0;
            }
        }
    }
    s2 = s.erase(0,counter+1);
 
    int var = s2.find(".",0);
    string string_1,string_2,string_3,string_4;
 
    string_1 = s2;
    string_2 = s2;
    string_3 = string_1.erase(var,string_1.length());
    string_4 = string_2.erase(0,var+1);
 
    if(string_3.length() < 1 || string_4.length() < 1){
        cout << "incorrect";
        return 0;
    }
 
    bool one = 0;
    bool two = 0;
 
    for(int i = 0;i<string_3.length();i++){
        for(int j = 0;j<bla_bla_bla.length();j++){
            if(isdigit(string_3.at(i)) || string_3.at(i) == bla_bla_bla.at(j)){
                cout << "incorrect " << endl;
                return 0;
            }
        }
    }
    for(int i = 0;i<string_4.length();i++){
        for(int j = 0;j<bla_bla_bla.length();j++){
            if(isdigit(string_4.at(i)) || string_4.at(i) == bla_bla_bla.at(j)){
                cout << "incorrect " << endl;
                return 0;
            }
        }
    }
    cout << s1 << endl << s2 << endl;
    return 0;
}
0
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 2
25.02.2018, 15:12  [ТС] 3
не проходит проверку, пишет тест 8
0
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
25.02.2018, 15:13 4
danis355, А че ты на вход даешь? Ща исправлю если надо + что он выдает. А то я всяких "тест 8" не знаю
0
1 / 1 / 2
Регистрация: 17.11.2017
Сообщений: 15
25.02.2018, 15:40 5
Лучший ответ Сообщение было отмечено danis355 как решение

Решение

#include <iostream>
#include<vector>
#include <string>
#include <string.h>
using namespace std;

int main() {
string s;
cin >> s;

int counter = 0;
int smth = 0;
string str(s);

int l = str.find("@", 0);
if (str.find("@", l + 1) != s.npos || l == s.npos) {
cout << "INCORRECT" << endl;
return 0;
}

int k = str.find(".", 0);
if (str.find(".", k + 1) != s.npos || k == s.npos) {
cout << "INCORRECT";
return 0;
}

counter = s.find("@", 0);
if (counter == 0 || counter == s.npos) {
cout << "INCORRECT";
return 0;
}

smth = s.find(".", 0);
if (smth <= counter + 1 || smth == s.npos) {
cout << "INCORRECT";
return 0;
}

if (smth + 1 == s.npos) {
cout << "INCORRECT";
return 0;
}

string s1, s2, s3;

s3 = s;
s1 = s3.erase(counter, s3.size());
string bla = "{}][,;:?/|\*&^%$#()-_=+~`<>'";

for (int i = 0; i < s1.size(); i++) {
for (int j = 0; j < bla.size(); j++) {
if (s1.at(i) == bla.at(j)) {
cout << "INCORRECT" << endl;
return 0;
}
}
}
s2 = s.erase(0, counter + 1);

int var = s2.find(".", 0);
string string1, string2, string3, string4;

string1 = s2;
string2 = s2;
string3 = string1.erase(var, string1.size());
string4 = string2.erase(0, var + 1);

if (string3.length() < 1 || string4.size() < 1) {
cout << "INCORRECT";
return 0;
}


for (int i = 0; i < string3.size(); i++) {
for (int j = 0; j < bla.size(); j++) {
if (isdigit(string3.at(i)) || string3.at(i) == bla.at(j)) {
cout << "INCORRECT";
return 0;
}
}
}
for (int i = 0; i < string4.size(); i++) {
for (int j = 0; j < bla.size(); j++) {
if (isdigit(string4.at(i)) || string4.at(i) == bla.at(j)) {
cout << "INCORRECT";
return 0;
}
}
}
cout << s1 << endl << s2 << endl;
return 0;
}[/CPP]
1
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.02.2018, 16:15 6
Цитата Сообщение от danis355 Посмотреть сообщение
Проверьте, является ли заданный e-mail корректным.
http://rextester.com/OMYOK24431



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
#include <iostream>
#include <string>
#include <regex>
 
template<class Ch> struct validator;
    
    
template<> struct validator<char>    
{ 
    operator const char*()const noexcept 
        { return "^(\\d)*(\\w)*@(\\d)*(\\w)*\\.(\\d)*(\\w)*$"; }
};
    
template<> struct validator<wchar_t>
{ 
    operator const wchar_t*()const noexcept 
        { return L"^(\\d)*(\\w)*@(\\d)*(\\w)*\\.(\\d)*(\\w)*$"; }
};
 
template<class ch, class C1, class C2> 
void process(const ch* line, C1&& success, C2&& failed)
{
    using regex = ::std::basic_regex<ch>;
    using expr  = validator<ch>;
    
    const regex validator(expr{});
    std::regex_match(line, validator)? 
        success(line):
        failed(line);
}
 
 
int main()
{    
    setlocale(LC_ALL, "");
 
    const auto copy = [](const char* line)
        { std::cout << "line '" << line << "' корректное\n";  };
 
    const auto ignore = [](const char* line)
        { std::cout << "line '" << line << "' забракована...\n";  };
 
    process("ololo123@trololo.ru", copy, ignore);
    process("123@trololo.ru"     , copy, ignore);
    process("ololo@trololo.ru"   , copy, ignore);
    process(".ololo@trololo.ru"  , copy, ignore);
    process(".ololo@ru"          , copy, ignore);
    process("ololo123@trololo"   , copy, ignore);
}
0
25.02.2018, 16:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2018, 16:15
Помогаю со студенческими работами здесь

Проверить, является ли заданный год високосным и вывести следующий високосный год
В первую строку выведите YES, если данный год является високосным и NO, если не является. Во второй...

Проверить, является ли PIN-код корректным
В банке «Литровый» хотят установить сейф. Программистами этого банка уже написан генератор...

Проверить, является ли заданный массив палиндромом
нужно задать массив с помощью динамического выделения памяти и определить является ли он...

Проверить, является ли заданный текст «перевертышем»
2. Проверить, является ли заданный текст «перевертышем».


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru