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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [c++] Замена одного слова на другое 
:(
    Опции темы
StylePro
Дата 15.1.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Написать программу которая заменяет одно слово из файлана другое. В консоле пишется два слова через тире. Первое слово  нужно будет заменить на другое слово. Если можно то напишить программу  на Visual  Studio 2003. Заранее спасибо.
PM MAIL   Вверх
Xenon
Дата 16.1.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
#include <map>
using std::string;
using std::cout;
using std::cin;
using std::fstream;

typedef std::map<string,string> DictArr;

string parse(fstream* file)
{
    
    DictArr dictionary;
    cout << "Enter words: ";
    string buf;
    cin >> buf;
    string src_word,sub_word;
    int pos=buf.find('-');
    for(int i=0;i<buf.size();i++)
    {
        if(i<pos)
        {
            src_word+=buf[i];
        }
        if(i>pos)
        {
            sub_word+=buf[i];
        }
    }
    dictionary[src_word]=sub_word;
    //Разбор строки
    string data;//Содержание файла после обработки
    string word;//Текущее слово
    cout << "Parsing data from file ";
    while (!file->eof())
    {
        char separator;//Разделитель
        file->get(separator);
        if (separator==' ' || separator=='.' || separator==',' || separator==':' || separator=='!' || separator=='?' || separator=='!' || separator==';' || separator=='-')
        {
            DictArr::iterator iter=dictionary.find(word);//Если мы получили знак препинания, то слово считано и можно начать его поиск в словаре            
            if (iter==dictionary.end())
            {
                data+=word+separator;
            }
            else
            {
                data+=dictionary[word]+separator;//Если нашли, тогда заменим слово ее значением из словаря и прибавим разделитель
            }
            word.clear();//Слово внесено в data, следовательно на данный момент слов в буффере нет - чистим переменную
        }
        else
        {
            word+=separator;
        }
    }
    cout << "Done\n";
    return data;
}
int main(int argc, char* argv[])
{
    string path;
    string result;
    try
    {
        cout << "Enter path to file: ";
        getline(cin,path);
        fstream file(path.c_str(),std::ios::in);
        if (!file)
        {
            throw ("Couldn`t open file");
        }
        cout << "\nResult of work:\n" << parse(&file);
    }
    catch (char* msg)
    {
        cout << msg;
    }
    _getch();
    return 0;
}



--------------------
user posted image  
PM MAIL   Вверх
Oleg_Ci
Дата 17.1.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

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



Код

#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
#include <list>
using namespace std;

int main(){
    list<string> mas;
    fstream file( "text.txt", ios::in ); // файл для чтения и для записи
    if( !file.is_open()) return 1;
    
    string source, str, str1, str2;
    cout << "Enter 2 string -> ";
    getline( cin, str1, '-' );
    cin >> str2;
    char c;
    

    while( file.get( c )){
        source += c;
        if( isalpha( c )) str += c;
        else{
            if( str == str1 ){
                str2 += c;
                mas.push_back( str2 );
                str2.erase( str2.end() -1 );
            }
            else    mas.push_back( source );
            str = source = "";
        }
    }
    
    file.clear();
    file.close();
    file.open( "text.txt", ios::out | ios::trunc );
    for( list<string>::iterator pt=mas.begin(); pt!=mas.end(); ++pt )
        file << *pt;

    cin.sync();
    std::cin.get(); // пауза
    return 0;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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