Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <exception>
- #include <sstream>
- #include <string>
- #include <iomanip>
- using namespace std;
- struct Date
- {
- int year;
- int month;
- int day;
- };
- void EnsureNextSymbolAndSkip(stringstream& stream) // передаем строковый поток
- {
- if (stream.peek() != '/')
- {
- stringstream ss;
- // У потока есть метод peek, который позволяет посмотреть какой следующий символ идет в потоке
- ss << "expected / , but has: " << char(stream.peek());
- //throw exception();
- throw runtime_error(ss.str()); // Метод str() из потока вернет строчку, которая в нем записана
- }
- stream.ignore(1);//Нужно пропустить следующий символ "2017/01/25"
- //(передаем кол-во символов, которые хотим пропустить)
- }
- Date ParseDate(const string& s)
- {
- stringstream stream(s);// Объявили строковый поток, с которым дальше будем работать
- Date date;
- stream >> date.year; // Считываем из потока информацию
- EnsureNextSymbolAndSkip(stream);
- stream >> date.month;
- EnsureNextSymbolAndSkip(stream);
- stream >> date.day;
- return date;
- }
- //Для того чтобы обработать ошибки в С++ есть специальный синтаксис, который начинается с ключевого слова
- //try {нужно написать тот код, который потенциально может выбросить исключение}
- //В блоке try расположен потенциально опасный блок кода, который может выбросить исключение
- //
- //catch(exception&){обработчки ошибки}
- //Все исключения наследуются от класса exception
- int main()
- {
- //string date_str = "2017/01/25";// Будем считывать дату из строки
- string date_str = "2017a01b25";// Будем считывать дату из строки
- //Опасной функцией является ParseDate
- try
- {
- Date date = ParseDate(date_str);
- cout << setw(2) << setfill('0') << date.day << '.'
- << setw(2) << setfill('0') << date.month << '.'
- << setw(2) << setfill('0') << date.year << endl;
- }
- catch (exception& ex)
- {
- cout << "exeption: " << ex.what();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement