Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Гаряка Асмик
Статус: Специалист
Рейтинг: 3694
∙ повысить рейтинг »
lamed
Статус: Бакалавр
Рейтинг: 2583
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2308
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / C/C++

Номер выпуска:1532
Дата выхода:17.05.2010, 20:00
Администратор рассылки:Verena, Профессионал
Подписчиков / экспертов:438 / 164
Вопросов / ответов:1 / 1
IRC-канал по теме:#C

Вопрос № 178341: Доброго времени суток, уважаемые эксперты! Помогите, пожалуйста, со следующей задачей: Исходный файл содержит информацию: «ab12.34 Gercules small, Big 567» Из заданного файла получить: А) все непрерывные цепочки, состоящие из цифр. Результат...



Вопрос № 178341:

Доброго времени суток, уважаемые эксперты! Помогите, пожалуйста, со следующей задачей:
Исходный файл содержит информацию: «ab12.34 Gercules small, Big 567»
Из заданного файла получить:
А) все непрерывные цепочки, состоящие из цифр. Результат «12 34 567»
Б) все непрерывные цепочки, состоящие из букв. Результат «ab Gercules small Big»
В) непрерывную цепочку, состоящую из цифр 34. Результат «34»
Г) Цифру 5. Результат «5»
Результаты вывести на экран, разделить пробелами (см. результат). Имя входного файла задать как аргумент командной строки консольного приложения.
По возможности распишите, что к чему! И, если не трудно, для каждого пункта (А, Б, В, Г) напишите отдельный код.

Примечание: ПО - Microsoft Visual C++ 2008 - консольное приложение Win32, предмет - программирование на языке высокого уровня!

Отправлен: 12.05.2010, 12:37
Вопрос задал: Баженов Павел Андреевич, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает Micren, Профессионал :
Здравствуйте, Баженов Павел Андреевич.
Программа. С++. MS VS 2008.
Код:
#pragma warning(disable:4800)

#include <locale>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <functional>

using namespace std;

// Имя файла
const wchar_t* const FILE_NAME=L"input.txt";

// Синонимы для используемых типов
typedef void (*parser_t)(const wstring&);

// Ф-я для нахождения непрерывной последовательности чисел
void digit_parser(const wstring& str);
// Ф-я для нахождения непрерывной последовательности букв
void alpha_parser(const wstring& str);
// Ф-я для поиска подстроки "34"
void thirty_four_parser(const wstring& str);
// Ф-я для поиска подстроки "5"
void five_parser(const wstring& str);
// Ф-я для фыполнения с файлом требуемых действий
void parse_file(const wchar_t* const file_name,parser_t checker);

int main()
{
locale::global(locale(""));

// Вариант А
parse_file(FILE_NAME,digit_parser);

// Вариант Б
parse_file(FILE_NAME,alpha_parser);

// Вариант Г
parse_file(FILE_NAME,thirty_four_parser);

// Вариант Д
parse_file(FILE_NAME,five_parser);

_getwch();

return 0;
};

void parse_file(const wchar_t* const file_name,parser_t parser)
{
// Открываем файл
wifstream in(file_name);
if(!in)
{
wcout<<L"Не могу открыть файл"<<endl;
}
wstring str;
// Читаем по строкам
getline(in,str);
while(in)
{
// Разбираем каждую строку
parser(str);
getline(in,str);
}
}

typedef bool (*predicate_t)(wchar_t);

// Поиск группы элементов удовлетворяющих предикату
void find_group(const wstring& str,predicate_t predicate)
{
wstring::const_iterator begin_word,end_word=str.begin(),end_str=str.end();
while((begin_word=find_if(end_word,end_str,predicate))!=end_str)
{
end_word=find_if(begin_word,end_str,not1(pointer_to_unary_function<wchar_t,bool>(predicate)));
wcout<<wstring(begin_word,end_word)<<L' ';
}
wcout<<endl;
}

// Поиск последовательности str2 в str1
void find_sequence(const wstring& str1,const wstring& str2)
{
wstring::const_iterator begin=str1.begin(),end_str1=str1.end(),begin_str2=str2.begin(),end_str2=str2.end();
wstring::size_type str2_len=str2.length();
while((begin=search(begin,end_str1,begin_str2,end_str2))!=end_str1)
{
wcout<<str2<<L' ';
begin+=str2_len;
}
wcout<<endl;
}

// Предикат для чисел
inline bool digit_pred(wc har_t arg)
{
return iswdigit(arg);
}

// Предикат для букв
inline bool alpha_pred(wchar_t arg)
{
return iswalpha(arg);
}

// Ф-я для нахождения непрерывной последовательности чисел
inline void digit_parser(const wstring& str)
{
find_group(str,digit_pred);
}

// Ф-я для нахождения непрерывной последовательности букв
inline void alpha_parser(const wstring& str)
{
find_group(str,alpha_pred);
}

// Ф-я для поиска подстроки "34"
inline void thirty_four_parser(const wstring& str)
{
find_sequence(str,L"34");
}

// Ф-я для поиска подстроки "5"
inline void five_parser(const wstring& str)
{
find_sequence(str,L"5");
}

Пример работы:
Код:
12 34 567
ab Gercules small Big
34
5

Прикреплен архив с проектом для VS 2008. Прикрепленный файл: загрузить »

Ответ отправил: Micren, Профессионал
Ответ отправлен: 12.05.2010, 23:20
Номер ответа: 261353

Оценка ответа: 5

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261353 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.03.2010

    В избранное