Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2013, 12:48   #1
heret1c
Пользователь
 
Регистрация: 25.05.2013
Сообщений: 11
Восклицание Обработчик исключений на Visual C++ (не знаю как написать)

Помогите написать обработчик исключений по заданию:
Опишите функцию анализа номера телефона, обработайте ошибку задания номера в неверном формате (допустимый формат - +7(095)555-44-33).
Набросал вот такой код:

Код:
#include <iostream>
using namespace std;
 
bool valid(const std::string &str)
{
    try {
        number::parse(str);
    }
    catch (const number::parse_error&) {
        return false;
    }
    return true;
}
 
int main()
{
    char string[];
    cout << "Введите номер телефона в формате - (+7(095)555-44-33)";
    cin >> string;
    if (valid(string))
        cout << "Номер введен верно";
    else
        cout << "Вы ввели не правильный номер" << endl;
        
    return 0;
}
Осталось дописать класс number. Пожалуйста помогите. Я в классах не силен.

Последний раз редактировалось heret1c; 25.05.2013 в 12:55.
heret1c вне форума Ответить с цитированием
Старый 25.05.2013, 17:36   #2
revizor
Форумчанин
 
Аватар для revizor
 
Регистрация: 20.01.2013
Сообщений: 146
По умолчанию

Цитата:
Осталось дописать класс number.
Вот как раз с этого класса и надо было начинать
revizor вне форума Ответить с цитированием
Старый 25.05.2013, 17:36   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

heret1c

Осталось дописать класс number. Пожалуйста помогите. Я в классах не силен.

Код:
#include <string>
#include <boost/spirit/home/qi.hpp>
namespace qi = boost::spirit::qi;

class number
{
public:
	struct parse_error : public std::runtime_error
	{
		parse_error(const std::string& err) : std::runtime_error(err) {}
	};

	template <typename Iterator>
	struct grammar : public qi::grammar<Iterator, std::string()>
	{
		grammar() : grammar::base_type(start)
		{
			start = "+" >> qi::digit >> "(" >> qi::repeat(3)[qi::digit] >> ")"
				>> qi::repeat(3)[qi::digit] >> "-" >> qi::repeat(2)[qi::digit] >> "-"
				>> qi::repeat(2)[qi::digit];
		}

		qi::rule<Iterator, std::string()> start;
	};

	static void parse(const std::string& phone)
	{
		grammar<std::string::const_iterator> g;
		auto begin = phone.cbegin();
		std::string res;
		bool success = qi::parse(begin, phone.cend(), g, res);
		if (!(success && begin == phone.cend()))
			throw parse_error(phone);
	}
};
Rififi вне форума Ответить с цитированием
Старый 26.05.2013, 01:36   #4
heret1c
Пользователь
 
Регистрация: 25.05.2013
Сообщений: 11
По умолчанию

Конечно же спасибо за помощь. Но у меня такое чувство, что меня за буст завтра отымеют пополной. Будем змагаться
heret1c вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не знаю как написать прогу! Paul30001 Помощь студентам 11 22.08.2012 20:11
2 программы не знаю как написать Драа Помощь студентам 2 03.11.2011 11:21
не работает обработчик исключений EConvertError vitaliy1911 Общие вопросы Delphi 13 30.03.2011 12:37
обработчик исключений try catch Hacker19_90 Общие вопросы C/C++ 1 27.02.2009 11:05
Обработчик исключений Delphi xxxPascalxxx Помощь студентам 5 30.11.2008 06:37