Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
1 / 1 / 1
Регистрация: 05.10.2014
Сообщений: 32
1

Колода карт, считать данные из файла в кодировке Unicode

01.11.2014, 04:53. Просмотров 1139. Ответов 11
Метки нет (Все метки)

Здравствуйте, я имею необычную задачу, а именно, хочу считать из файла данные такого типа
2♥ 3♥ 4♥ 5♥ 6♥ 7♥ 8♥ 9♥ 10♥ Валет♥ Дама♥ Король♥ Туз♥
2♦ 3♦ 4♦ 5♦ 6♦ 7♦ 8♦ 9♦ 10♦ Валет♦ Дама♦ Король♦ Туз♦
2♣ 3♣ 4♣ 5♣ 6♣ 7♣ 8♣ 9♣ 10♣ Валет♣ Дама♣ Король♣ Туз♣
2♠ 3♠ 4♠ 5♠ 6♠ 7♠ 8♠ 9♠ 10♠ Валет♠ Дама♠ Король♠ Туз♠
но этот файл сохраняется только в кодировке юникода. как считать его правильно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
#include <fstream>
#include <iterator>
#include<string>
using namespace std;
int main()
{
    vector<string> v;
    vector<string>::iterator a, b;
    ifstream in("cards");
    string n;
    while (!in.eof())
    {
       in >> n;
       v.push_back(n);
    }
    in.close();
    b = v.end();
    a = v.begin();
    for (; a !=b; a++)
        cout << *a << " ";
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2014, 04:53
Ответы с готовыми решениями:

Колода карт из 36 карт, сколькими способами можно достать 5 карт?
Колода карт из 36 карт. Сколькими способами можно достать 5 карт так, чтобы среди них были пиковые...

Колода из 36 карт. Кол-во способов выбрать 5 карт
Сколькими способами из колоды в 36 карт можно выбрать неупорядоченный набор из 5 карт так, чтобы в...

Реализовать структуру "Колода карт"; сформировать случайную перетасовку карт для трёх игроков
Создать структуру колоды карт, состоящую из двух полей- переменных перечислимого типа &quot;масть&quot; и...

колода карт
Из колоды в 52 карты вытаскивают карты по одной. Найти вероятность что 26 вытащенная карта будет 3...

11
28 / 23 / 12
Регистрация: 25.08.2013
Сообщений: 42
03.11.2014, 19:01 2
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <algorithm>
#include <codecvt>
#include <fstream>
#include <iostream>
#include <locale>
#include <string>
#include <sstream>
#include <vector>
 
 
#include <fcntl.h>
#include <io.h>
 
using namespace std;
int main()
{
  ::_setmode( ::_fileno(stdout), _O_U16TEXT ); // Разрешить вывод Юникода в консоль. Только для Windows.
 
  std::ifstream in ( "cards.txt", ios_base::binary ); // файл в кодировке utf8 BOM
  std::wstring str;
 
  std::wbuffer_convert<std::codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>> utf8buf_conv( in.rdbuf() ); // конвертер utf8 в wstring ( UCS2/UCS4 )
 
  std::vector<std::wstring> lines;
 
  std::wstringstream wss;
  wss.set_rdbuf( &utf8buf_conv );
 
  while ( !wss.eof() )
  {
    ::getline( wss, str );
    lines.emplace_back( std::move(str) );
  }
 
  for ( auto && line : lines )
    std::wcout << line << std::endl;
 
}
1
6916 / 5981 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
03.11.2014, 19:21 3
А почему binary?
0
1 / 1 / 1
Регистрация: 05.10.2014
Сообщений: 32
03.11.2014, 22:35  [ТС] 4
Извините, но ничего не работает(
0
2702 / 1872 / 553
Регистрация: 05.06.2014
Сообщений: 5,426
03.11.2014, 22:58 5
Цитата Сообщение от Еленааа Посмотреть сообщение
но этот файл сохраняется только в кодировке юникода. как считать его правильно?
Вам с минимальными плясками с бубном? Тогда сохранить файл в utf-16, string поменять на wstring, ifstream на wifstream, перед кавычками строковых и символьных констант поставить L (L"это текст в utf-16"). Ну, по крайней мере перед кавычками тех констант, которые вы будете сравнивать с прочитанным (L'♥'). Впрочем, при попытке все это вывести на экран все равно прядется прыгать с бубном. У вас же с вероятностью 99% Винда, у которой консоль далеко не в юникоде работает.
0
46 / 41 / 20
Регистрация: 17.03.2014
Сообщений: 131
04.11.2014, 00:59 6
в книге Лафоре был хороший пример о генерации колоды карт и действии с ними. Написано доступно и просто. Посмотрите, возможно вам поможет
1
2702 / 1872 / 553
Регистрация: 05.06.2014
Сообщений: 5,426
04.11.2014, 01:01 7
Цитата Сообщение от kaznachei67 Посмотреть сообщение
в книге Лафоре был хороший пример о генерации колоды карт и действии с ними. Написано доступно и просто. Посмотрите, возможно вам поможет
Человеку нужна не генерация, а корректное чтение псевдографики из текстового файла.
0
46 / 41 / 20
Регистрация: 17.03.2014
Сообщений: 131
04.11.2014, 01:49 8
Лучший ответ Сообщение было отмечено Еленааа как решение

Решение

Цитата Сообщение от Renji Посмотреть сообщение
Человеку нужна не генерация, а корректное чтение псевдографики из текстового файла.
Зависит от поставленной задачи. Если есть возможность, я бы посоветовал передавать значение масти как переменную типа int, осуществляя форматированный вывод уже в программе. При таком подходе вопрос кодировки отпадает сам собой (у Лафоре реализован как раз такой подход, мне кажется очень удобным).
Если нет, и мой совет не по адресу - извиняйте, что отнял время
1
4176 / 2282 / 387
Регистрация: 05.10.2013
Сообщений: 6,385
Записей в блоге: 177
07.11.2014, 11:12 9
Елена, в реальной жизни не так много людей, которым приходится читать из unicode файлов. Другими словами, на практике почти всегда можно изменить условия так, чтобы этого не пришлось делать. Возможно преподаватель поставил такие условия: прочитать из unicode файла, а то не поставлю зачёт. Это печально. А если задание - это написать карточную игру и это вы сами решили читать псевдографику из unicode файла, то можно читать из обычного файла целые числа, каждое из которых означает масть. Можете ли вы озвучить изначальное задание?
1
1 / 1 / 1
Регистрация: 05.10.2014
Сообщений: 32
07.11.2014, 13:15  [ТС] 10
Спасибо большое за помощь) Мне действительно удалось не использовать Unicode, поставила себе такую задачу, потому что хотелось узнать, как можно считать файл подобного типа.
1
DiffEreD
07.11.2014, 14:27
  #11

Не по теме:

Хотел проверить код StailGot, но оказывается что в MinGW(4.9.1) почему то отсутствует заголовок codecvt. Походу только на VS прокатит.

0
2702 / 1872 / 553
Регистрация: 05.06.2014
Сообщений: 5,426
07.11.2014, 14:32 12
codecvt - C++11. Он полноценно поддерживается далеко не везде. Особенно, если мы говорим о каком ни будь Дебиане, где версии компиляторов из стабл и тестинг ветки заметно различаются.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2014, 14:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

колода карт
Добрый День! Очень прошу помочь с задачей! В колоде имеются 4 карты. Известно, что среди них...

Колода карт
из полной колоды карт (52 штуки) вынимается сразу несколько карт. сколько карт нужно вынуть для...

Колода карт
В колоде 36 карт. Сдали 4 определить: а) вероятность того что из этих 4-х две будут козырные, а...

Колода карт
Пожалуйста помогите решить/подсказать как решить следующую задачу: Из колоды 36 карт (4 масти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.