Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2010, 21:45   #1
LaDark
Пользователь
 
Регистрация: 01.11.2010
Сообщений: 14
По умолчанию Замена слов на синонимы C++

Вечер добрый. Я новичек в программировании на C++ и много не знаю.
Задали написать такую программу: даны 2 файла. Первый содержит произвольный текст, второй содержит пары слов, второе является синонимом первого. Нужно сравнить эти файлы, и при нахождении слова в тесте заменить его на синоним из второго файла.
Листинг написал, но есть странности.
1. Работает почему-то только на Visual C++ 2008 на ноутбуке. В других местах текст остается без изменения.
2. Меняет только 1 слово на синоним.
В чем проблема так и не понял.
Цитата:
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;

int main()
{
ifstream in("in.txt");
ifstream out("out.txt");
char x[20];
char z[20];
int c=0;
while(!in.eof())
{
in>>x;
out.seekg(0, ios::beg);
while(!out.eof())
{
out>>z;
if(!strcmp(z,x)){
out>>z;
cout<<" "<<z<<" ";
c=1;
}
}
if(c==0){
cout<<" "<<x<<" ";
}
c=0;
}

system("pause");
}
LaDark вне форума Ответить с цитированием
Старый 02.11.2010, 02:32   #2
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
#include <fstream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>

int main( ){
    std::ifstream text( "in.txt" ); // файл с текстом
    std::vector< std::string > file;
    std::string tmp;
    while( std::getline( text, tmp ) )
	file.push_back( tmp );
   text.close( );

    for( std::vector< std::string >::iterator i = file.begin( )
	     ; i != file.end( ); ++i ){
	text.open( "out.txt" ); // файл с синонимами
	std::string left, right;
	while( !text.eof( ) ){
	    text >> left;
	    text >> right;
	    std::string::size_type pos = 0;
	    while( ( pos = i->find( left, pos ) ) != std::string::npos ){
		if( pos + left.size( ) == i->size( ) || ( *i )[ pos + left.size( ) ] == ' ' )
		    i->replace( pos, left.size( ), right );
		++pos;
	    }
	}
	text.close( );
    }
    std::ofstream result( "in.txt" ); // файл с текстом
    std::copy( file.begin( ), file.end( ), std::ostream_iterator< std::string >( result, "\n" ) );
    result.close( );
}
длинно получилось, но это всё ночь, она виновна оО
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 08.11.2010, 19:01   #3
LaDark
Пользователь
 
Регистрация: 01.11.2010
Сообщений: 14
По умолчанию

Благодарю, но ваш код у меня почему-то не захотел работать, ошибок нет, но ответ выдает не тот. Зато в своем нашел ошибку.
LaDark вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
замена слов в цыкле sergeiqwe PHP 3 08.06.2010 00:18
Замена слов в строке lpofigistl Общие вопросы C/C++ 1 16.05.2010 20:38
замена слов sergeiqwe PHP 2 05.05.2010 19:29
С++ строки(замена слов) GodsamcK Помощь студентам 0 15.12.2009 19:02
замена слов lekom Общие вопросы Delphi 7 27.09.2009 23:46