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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2010, 19:46   #1
Alessa
Новичок
Джуниор
 
Регистрация: 22.01.2010
Сообщений: 5
По умолчанию Вывод русской wstring

Здравствуйте, заранее прошу прощенья, если этот вопрос уже был. Но я ничего подходящего не нашла.
Вобщем, есть test.txt файл с русским текстом UTF-8. С ним хочется произвести некоторые манипуляции в частнсти считывать его содержимое и выводить на экран. А потом сохранить в другой файл опять же в UTF-8.
Код такой
Код:
#include<fstream>
#include<iostream>
#include <string>
using namespace std;
int main() {
	wifstream infile("test.txt");
	wofstream outfile("out.txt");
        wstring in_string;
	while(!infile.eof()) {
		infile>>in_string;
		outfile<<in_string<<" ";
		wcout<<in_string<<endl;
		in_string.clear();
	}
	return 0;
}
Выводиться какая-то чушь, а в файл сохраняется нормальный текст. Что с этим делать?

Последний раз редактировалось MaTBeu; 22.01.2010 в 21:36.
Alessa вне форума Ответить с цитированием
Старый 22.01.2010, 20:50   #2
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Может дело лучше попробовать использовать getline(in_string,1000,'\n') ? ну заместо 1000 там число символов, которые максимум могут оказаться в строке

Хотя тут проблема скорее всего именно в wcout, или даже в самой консоли, а возможно в настройках проекта, alt+f7 - general - character set или что-то такое, на русском "набор символов", там юникод попробуйте поставить!
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 22.01.2010, 20:54   #3
Alessa
Новичок
Джуниор
 
Регистрация: 22.01.2010
Сообщений: 5
По умолчанию

Getline по определенным причинам для меня неподходящий вариант.
В general - character set у меня и до этого unicode стоял.
Alessa вне форума Ответить с цитированием
Старый 22.01.2010, 21:14   #4
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Цитата:
Сообщение от Alessa Посмотреть сообщение
Getline по определенным причинам для меня неподходящий вариант.
В general - character set у меня и до этого unicode стоял.
Т.е. мульти байт, там по умолчанию юникод
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 22.01.2010, 21:23   #5
Alessa
Новичок
Джуниор
 
Регистрация: 22.01.2010
Сообщений: 5
По умолчанию

Не, не помогло.
Кстати вот это setlocale(LC_ALL, "Russian"); тоже не помогло. Вместо абракадабры выводится i> и больше ничего.
Alessa вне форума Ответить с цитированием
Старый 22.01.2010, 22:40   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

выставьте в настройках консоли юникод-шрифт(Lucida Console или Consolas).
В начале main напишите SetConsoleOutputCP(1251);
Должно помочь )
netrino вне форума Ответить с цитированием
Старый 22.01.2010, 22:49   #7
Alessa
Новичок
Джуниор
 
Регистрация: 22.01.2010
Сообщений: 5
По умолчанию

Заработала, большое спасибо!
По ходу дела у меня другой вопрос возник.
Код:
#include<fstream>
#include<iostream>
#include <string>
#include<wchar.h>
#include<windows.h>
using namespace std;
int main() {
SetConsoleOutputCP(1251);
wifstream infile("test.txt");
wofstream outfile("out.txt");
wstring in_string;
while(in_string != L"аббатство" ) {
	infile>>in_string;
	outfile<<in_string<<" ";
	wcout<<in_string<<" ";
	in_string.clear();
}

return 0;
}
вот такой код приводит к бесконечному циклу. Как с таким можно бороться?

Последний раз редактировалось MaTBeu; 23.01.2010 в 02:32.
Alessa вне форума Ответить с цитированием
Старый 22.01.2010, 23:56   #8
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

попробуйте поэтапно проследить несколько циклов программы с помощью system("pause"); и на основе этого сделать вывод, что вывожится и находится в строке с каждой итерацией
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 23.01.2010, 02:33   #9
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Лучше сделать цикл до конца файла.
Код:
while(infile.eof())
MaTBeu вне форума Ответить с цитированием
Старый 23.01.2010, 09:12   #10
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
Лучше сделать цикл до конца файла.
Код:


while(infile.eof())
Если до конца файла, тогда так
Код:
while(!infile.eof())

Последний раз редактировалось profi; 23.01.2010 в 09:15.
profi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа распознавания русской речи - Комбат denis47 Помощь студентам 10 25.06.2016 22:39
mysql 3.23.58 с русской кодировкой !!!! Flanker13 БД в Delphi 12 21.04.2009 09:48
Зашифровать файл, выполнив циклическую замену каждой русской буквы epica Паскаль, Turbo Pascal, PascalABC.NET 1 06.11.2008 19:00