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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сравнение строк 
:(
    Опции темы
weirdo
Дата 20.3.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот моя задача...(Microsoft Visual C++)

С помощью текстового редактора создать файл, содержащий текст, длина кото¬рого не превышает 1000 символов (длина строки текста не должна превышать 70 символов).
Имя файла должно иметь расширение DAT.
Написать программу, которая:
-    выводит текст на экран дисплея;
-    определяет порядковый номер заданного слова в каждом предложении текста (заданное слово вводится с клавиатуры);
-    вывести в текстовый файл каждое предложение текста, в котором есть заданное слово.

не могу сделать последние два задания в задаче...представлен только кусок кода
Код

/* функция записи предложений,в которых содержится заданное слово и порядковый номер его */
void sentence_in_file(string str, string slovo) // передается предложение и слово,которое нужно найти в этом предложении
{
    // имя информационного (результирующего) файла
    const char *FileName = "info.dat"; 

    ofstream out; // создается поток вывода
    out.open(FileName, ios::out | ios::app); // открытие файла для дозаписи
    int i = 0;
    int j=1;
    string s[20]; // массив слов предложения (?)
    string slovo1; // слово предложения
            
    for (; i < str.length(); i++) // цикл прохода по всем символам предложения
        if (!isspace(str[i])) 
            // если не является пробелом
            slovo1+=str[i];
    else 
    {
    slovo1=s[j];  // как только появился пробел-заносим это слово в массив
    slovo1=" "; // делаем его пустым для других слов
    ++j;
}


    for(i=1;i<=j;i++)
    if (slovo==s[i])   // вот тут вопрос!!!!!!!!!!! как сравнивать наше заданное слово с каждым словом в предложении???
        
    {out <<str << "\n";out << i << "\n"; //и что б потом...после предложения выводило порядковые номера слова...
    break;}
            
out.close(); // закрытие файла        
    
}


как сравнивать наше заданное слово с каждым словом в предложении???
...и что б потом...после предложения выводило порядковые номера слова...в файл
PM MAIL   Вверх
jonie
Дата 20.3.2008, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



strcmp(char*,char*) функция есть. Если вернет 0 то значит слова совпали.
Код

    slovo1=s[j];  // как только появился пробел-заносим это слово в массив
    slovo1=" "; // делаем его пустым для других слов
как-то дико и непонятно



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Rififi
Дата 20.3.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

#include <string>
#include <vector>
#include <algorithm>
#include <numeric>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iterator>

typedef std::vector<std::string> strings_arr;
typedef std::vector<int> ints_arr;

// Helper для считывания из файла по-строчно
struct line
{
    friend std::istream& operator>>(std::istream& s, line& l)
    {
        std::getline(s, l.buf_);
        return (s);
    }
    operator const std::string () const { return (buf_); }
    std::string buf_;
};

// Потоковя запись массива строк в файл
std::ostream& operator<<(std::ostream& os, const strings_arr& lines)
{    
    struct flush : public std::unary_function<std::string, void>
    {
        flush(std::ostream& os) : os_(os) {}
        result_type operator() (const argument_type& v) const
        {
            os_ << v << std::endl;
            return result_type();
        }
        std::ostream& os_;
    };

    std::for_each(lines.begin(), lines.end(), flush(os));
    return (os);
}


// Считать строки из файла в массив строк
strings_arr read_lines(const std::string& fileName)
{
    strings_arr lines;
    std::ifstream ifs(fileName.c_str());
    std::copy(
        std::istream_iterator<line>(ifs),
        std::istream_iterator<line>(),
        std::back_inserter(lines));
    return (lines);
}

// 2. Функция определяет порядковый номер заданного слова в каждом предложении текста
// возврат: вектор с порядковым номером или -1
ints_arr search(const strings_arr& lines, const std::string word)
{
    // Функтор для поиска индесков слов
    struct counter : public std::unary_function<std::string, void>
    {
        counter(const std::string& s) : pattern_(s) {}
        result_type operator() (const argument_type& s)
        {
            // разбиваем строку на слова
            strings_arr words;
            std::stringstream ss(s);
            std::copy(
                std::istream_iterator<std::string>(ss),
                std::istream_iterator<std::string>(),
                std::back_inserter(words));
            // ищем паттерн...
            strings_arr::iterator found = std::find(words.begin(), words.end(), pattern_);
            res_.push_back(
                found == words.end() ? -1 : std::distance(words.begin(), found)
                );
            return result_type();
        }

        operator ints_arr() { return (res_); }

        ints_arr res_;
        std::string pattern_;
    };

    return std::for_each(lines.begin(), lines.end(), counter(word));    
}

// 3. Вывести в текстовый файл каждое предложение текста, в котором есть заданное слово
void print_lines_if(const std::string& fileName, const strings_arr& lines, const std::string& word)
{
    // Функтор для отсеивания строк
    struct finder : public std::unary_function<std::string, bool>
    {
        finder(const std::string& worw) : word_(worw) {}
        result_type operator() (const argument_type& v) const
        {
            // используем самую простую форму поиска
            return v.find(word_) != std::string::npos;
        }
        std::string word_;
    };

    // Отсеиваем ненужные строки
    strings_arr selected;
    std::remove_copy_if(
        lines.begin(), lines.end(),
        std::back_inserter(selected),
        std::not1(finder(word)));

    // Запись результата, если есть что записывать...
    if (selected.size())
    {
        std::ofstream ofs(fileName.c_str());
        ofs << selected;
    }
}

// Использование
void test()
{
    // считать строки
    const std::string data = "in.dat";
    strings_arr lines = read_lines(data);
    
    // поиск слова во всех считанных строках
    const std::string pattern = "?";
    ints_arr res = search(lines, pattern);

    // сливаем строки в файл, если там встречается паттерн
    print_lines_if("out.dat", lines, pattern);
}

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


Новичок



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

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



у меня Microsoft Visual C++
таких библиотек как...vector.h  algorithm.h...и других...нету

Это сообщение отредактировал(а) weirdo - 20.3.2008, 22:37
PM MAIL   Вверх
jonie
Дата 20.3.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



а где их Rififi использует ?!


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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