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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2013, 23:49   #1
fratriecz
Пользователь
 
Регистрация: 13.10.2012
Сообщений: 18
По умолчанию прога-переводчик си++

Чуваки делаю прогу-переводчик,нужно чтобы прога читала слово с текстового файла сопоставляла его со словами из др текстового файла и если слово во втором файле есть вывести его перевод,а он выводит перевод последнего имеющегося слова,где ошибка??
Код:
#include<iostream>
#include<iterator>
#include<map>
#include<string>
#include<fstream>
#include<windows.h>
#include <locale>

using namespace std;

int main()
{setlocale(LC_CTYPE, "Russian");//âêëþ÷åíèå ðóññêîãî øðèôòà
	typedef multimap<string,string> strMap;

	strMap enru;
	strMap ruen;
	strMap::iterator it;


	string en;
	string ru;

	ifstream fin("words.txt",ios::in | ios::binary);
    	
	while(!fin.eof())
	{
		getline(fin,en,' ');
		getline(fin,ru);
		enru.insert(make_pair(en,ru));
		ruen.insert(make_pair(ru,en));
	}
	//-----------------------------------------------------------	
{	ifstream fin("hello.txt",ios::in | ios::binary);
    cout << fin.rdbuf();
    	printf("\n перевод : %s \n" , enru.find(en)->second.c_str());
   	
  	//-----------------------------------------------------------	
	while(1)
	{
	printf("введите словоî : ");
		
		getline(cin,en);

		if(en[0] > 'z')
		{
			it = enru.find(en);
				
			if(it != enru.end());
	

		}
		else
		{
			it = enru.find(en);
			if(it != enru.end())
				printf("\n перевод : %s " , enru.find(en)->second.c_str());
		}
			//------------------------------------------
		printf("\n\n");		
	}
}}
Вложения
Тип файла: txt words.txt (93 байт, 123 просмотров)
Тип файла: txt hello.txt (4 байт, 133 просмотров)
fratriecz вне форума Ответить с цитированием
Старый 22.02.2013, 12:32   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

1) Чувак, что у тебя делает флаг ios::binary при обработке текстовых файлов?

2) Насколько я могу видеть, программа выводит буфер потока fin (результат, по-моему, не вполне предсказуем - зачем это вообще?), а следом - "перевод" строки en (которая, натурально, после предыдущего цикла содержит последнее слово из словаря). Кода, который бы читал по словам содержимое потока fin, я просто не вижу.
Abstraction вне форума Ответить с цитированием
Старый 22.02.2013, 17:33   #3
fratriecz
Пользователь
 
Регистрация: 13.10.2012
Сообщений: 18
По умолчанию

чувак,я си 4 день учу,раскажи мне какой функцией или процедурой считать слова из потока fin?
fratriecz вне форума Ответить с цитированием
Старый 22.02.2013, 17:51   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Впрямую такого готового метода нет.
Список методов класса std::istream.
Есть предложение читать по одному символу, сохраняя их в буфер, до достижения символа, не являющегося символом слова (функция isalpha() проверяет, является ли символ буквой - если в словаре нет слов вроде "short-tempered", этого хватит). После чего слово в буфере переводить и выписывать куда надо; символы, не принадлежащие слову, просто выводить без изменений.
Abstraction вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переводчик Bekzat_92 Помощь студентам 2 12.04.2012 21:46
Переводчик! Cи Sxronjkeee Помощь студентам 0 15.11.2010 22:03
Переводчик (Си) N.o.n.a.m.e Помощь студентам 6 13.08.2010 16:29
Переводчик Jinno Фриланс 10 05.11.2009 21:45
Переводчик на js Alfonso1 JavaScript, Ajax 1 23.10.2009 13:49