Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Стандартные потоки и работа с ними  (Прочитано 8309 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« : 31-01-2010 18:28 » 

Здравствуйте! При работе с потоками - ifstream и ofstream возникают проблемы, но сначала вопрос. Нормально ли работают потоки файлов открытые подобным образом:
Код:
ifstream file_s_ne_slog("table_for_slog.txt");
ofstream file_s_valid_slog("file_main_one.txt");

// а внутри код обработки потоков

file_s_valid_slog.close();
file_s_ne_slog.close();
Символы при чтении из таких потоков превращаются в какие-то иероглифы, как можно обойти проблемы возникающие при такой реализации?
Записан

Краткость - сестра таланта, некраткость - сам талант!
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 31-01-2010 19:19 » 

Символы при чтении из таких потоков превращаются в какие-то иероглифы, как можно обойти проблемы возникающие при такой реализации?
А файлы в какой кодировке?
Записан
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 31-01-2010 20:31 » new

Вад, кодировка обычная - ANSI(Windows)
Записан

Краткость - сестра таланта, некраткость - сам талант!
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #3 : 31-01-2010 21:04 » 

весь код чтения (а также открытия и закрытия) в студию
Записан

С уважением Lapulya
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 01-02-2010 11:27 » 

Значит попытался переделать, но всё равно мелочи не дают алгоритму работать! ((

Задача заключается в обработке текстового файла, содержащего части слов. Некоторые части не являются слогами.

Общий алгоритм обработки:
1. Первый алгоритм я реализовал более менее. Он делит слова в предложении на части, которые не все сразу являются слогами. Пример работы первого алгоритма:
Цитата
Введённая строка: Привет Антон!

Обработанный и записанный результат в файл:

При // слог
ве // слог
т // не слог
А // не слог
нто // лишний символ буквы - 'н', слог - 'то'
н
// ....
2. Второй алгоритм я вам сейчас показываю. Проблемы с ним. Алгоритм выполняет проверку - последний символ прочитанной строки является-ли гласной буквой, если да, то вставить считанную часть слова в специальную строку. Компиляция кода проходит нормально, а при выполнении возникает исключение.
Код:
char * slog = new char [10];
 int size_of_str_base,size_of_str_one_slog,pos_naydena,index,beg;
 string Str_Base,Str_All_Slog;
 bool Valid_Slog;

  ifstream file_s_ne_slog("table_for_slog.txt");

  index = strlen(Mas_Glasn);
  Valid_Slog = false;
  beg = 1;

   while (!file_s_ne_slog.eof()) {

file_s_ne_slog >> slog;
size_of_str_base = strlen(slog);

MessageDlg(IntToStr(size_of_str_base), mtInformation, TMsgDlgButtons() << mbOK, NULL);

for (j = 0; j < index; j++) {

 if (slog[size_of_str_base - 1] == Mas_Glasn[j]) {

Valid_Slog = true;

 }

}

if (Valid_Slog) {

     MessageDlg("Слог валиден!", mtInformation, TMsgDlgButtons() << mbOK, NULL);

Str_All_Slog.insert(beg,slog);

beg = beg + size_of_str_base - 1;

Str_All_Slog.insert(beg, " ");

beg = beg + 1;

Valid_Slog = false;

}
else continue;

   }

  file_s_ne_slog.close();

  ofstream file_for_valid_slog("file_main_one.txt");

  file_for_valid_slog << Str_All_Slog;

  file_for_valid_slog.close();
« Последнее редактирование: 01-02-2010 12:35 от Dr.CODE » Записан

Краткость - сестра таланта, некраткость - сам талант!
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 01-02-2010 15:35 » 

В общем облегчил и оптимизировал код:
Код:
int index;
 string Str_Base,Str_All_Slog;

  ifstream file_s_ne_slog("table_for_slog.txt");
  ofstream file_for_valid_slog("file_main_one.txt");

   while (!file_s_ne_slog.eof()) {

file_s_ne_slog >> Str_Base;

index = Str_Base.find_first_of("АаОоЕеИиЁёУуЮюЭэЯя");

if (index > 0) {

MessageDlg("Слог валиден!", mtInformation, TMsgDlgButtons() << mbOK, NULL);

 file_for_valid_slog << Str_Base << endl;

}
else continue;

   }

  file_for_valid_slog.close();
  file_s_ne_slog.close();
И теперь он работает стабильно, а что самое главное - работает! Улыбаюсь Но это стандартный и простой алгоритм, который требует доработки!
« Последнее редактирование: 01-02-2010 15:38 от Dr.CODE » Записан

Краткость - сестра таланта, некраткость - сам талант!
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #6 : 02-02-2010 05:12 » 

Код:
char * slog = new char [10]; // 1
....................
file_s_ne_slog >> slog;  // 2
size_of_str_base = strlen(slog); // 3

это хрень, если честно
1. зачем 10 байт вытаскивать из кучи?
2. в этой точке оператор >> не в курсе размера slog и предполагает, что он достаточен, а это не так.
3. используй строки

ИМХО исправил ты правильно  Отлично, т.е.
Код:
file_s_ne_slog >> Str_Base;
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines