Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Строки и файлы, Работа со строками и файлами... 
:(
    Опции темы
Entrery
Дата 25.11.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



Написать прагорамму, которая считывает текст из файла и выводит на экран слова, начинающиеся с глассных букв.

Так полностью выглядит задание, поэтому скажу сразу, ничем дополнить от себя я его не могу. Полностью пологаюсь на вас, так что если у вас есть сомнения по поводу четкости понимания текста задания - не стесняйтесь и делайте так, как можете =^_^=

Заранее спасибо.
PM MAIL   Вверх
Rififi
Дата 25.11.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 4
Всего: 36



Код
#include <string>
#include <functional>
#include <algorithm>
#include <iterator>
#include <fstream>
#include <iostream>
#include <stdexcept>

/*
    Написать прагорамму, которая считывает текст из файла и выводит на экран слова, начинающиеся с глассных букв.
*/

// Поиск совпадения с первой буквой
template <typename T>
struct match : std::unary_function<T, bool>
{
    match(const T& matches) : matches_(matches) {}
    bool operator() (const T& word) const
    {    return matches_.find(word[0]) != T::npos;    }
    const T matches_;
};

// Печать слов, удовлетворяющих условию
template <typename _Pred1>
static void print_if(const std::string& inFile, _Pred1 pred)
{
    // Подготовка файла...
    std::ifstream ifs(inFile.c_str());
    if (!ifs.good())
        throw std::runtime_error("Invalid input file");
    
    // Должно помочь с русскими буквами
    // В файле текст должен быть в кодировке CP1251
    const std::string ru_loc = "Russian";
    std::locale ru(ru_loc.c_str());    
    setlocale(LC_ALL, ru_loc.c_str());
    ifs.imbue(ru);
    std::cout.imbue(ru);
    
    // Let's Rock!
    std::remove_copy_if(        
        std::istream_iterator<std::string>(ifs),
        std::istream_iterator<std::string>(),
        std::ostream_iterator<std::string>(std::cout, " "),
        std::not1(pred));
}

int main()
{    
    const std::string inFile = "in.txt";
    const std::string letters = "аеиоуыэюя";    // Гласные буквы

    print_if(inFile, match<std::string>(letters));
    return (0);
}


Добавлено через 2 минуты и 53 секунды
Содержимое файла:
а роза упала на лапу азора
вывод:
а упала азора

кстати,  этом примере большие и маленькие буквы различаются...
PM MAIL   Вверх
Entrery
Дата 25.11.2008, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



Rififi
Это точно в С++? почму у библиотек нету <.... .h>
да и библиотеки какие-то левые, он их не находит...
и потом еще ошибки происходят.... 
Но об этом потом, для начала я хотел бы убедиться что это в С++ написано...
PM MAIL   Вверх
taiven
Дата 25.11.2008, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 4
Всего: 9



Код

#include <iostream>
#include <cctype>
#include <fstream>
#include <cstring>
#include <clocale>

using namespace std;

bool can_out(const char *word)
{
    const char letters[] = "aeiouyаеиоуыэюя";
    for(unsigned i = 0; i < strlen(letters); ++i)
        if(word[0]==letters[i]) return true;
    return false;
}

int main()
{
    char temp[30] = {0};
    char ch;
    int index = 0;

    ifstream in("C:\\in.txt");

    if(!in)
    {
        cout << "Error: Unable to open file\n";
        system("pause");
        exit(0);
    }

    in.unsetf(ios::skipws);
    setlocale(LC_ALL,"");

    while(!in.eof())
    {
        in >> ch;
        if(isalnum(ch))
        {
            while((ch != ' ' && !ispunct(ch)) && in)
            {
                temp[index++] = ch;
                in >> ch;
            }
            index = 0;
        
            if(can_out(temp)) cout << temp << '\n';
            memset(temp, '\0', 30);
        }
    }
    in.close();
    system("pause");
    return 0;
}

Для старых компиляторов заголовки будут выглядеть так: 
#include <iostream.h>
#include <ctype.h>
#include <fstream.h>
#include <string.h>
#include <locale.h>


Это сообщение отредактировал(а) taiven - 25.11.2008, 23:54
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0861 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.