Форум программистов, компьютерный форум CyberForum.ru

Кодировки, вывод/ввод на консоль и в файл - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка массива объектов класса http://www.cyberforum.ru/cpp-beginners/thread861002.html
Пишу программу в которой есть массив объектов и методы которые его сортируют, но после сортировки ничего не выводится, а просто чистое консольное окно, помогите разобраться TMagnitafon.h #pragma once #include "string.h" class TMagnitafon { public: char pType; char pFirma;
C++ Запись кириллицы в строку из консоли Столкнулся с такой проблемой: если я пытаюсь заполнить строку из консоли, то потом из этой строки на экран выводятся кракозябры. Подскажите, пожалуйста, как сделать, чтобы все было нормально? int _tmain(int argc, _TCHAR* argv) { setlocale (LC_ALL,"rus"); string str; char tmp; cout<<"Введите, что вы хотели бы вывести на экран: "; getline(cin,str); cout<<str<<endl; system... http://www.cyberforum.ru/cpp-beginners/thread860976.html
Наибольшее расстояние между словами в файле C++
Полный текст задачи: Дан файл, содержащий текст на русском языке и некоторые два слова. Определить, сколько раз они встречаются в тексте и найти наибольшее расстояние между этими словами.(сколько слов между ними). Добавлено через 8 минут #include<fstream> #include<iostream> #include<string> #include<conio.h> #include<stdio.h> #include <sstream> #include <locale.h>
C++ Считывание из файла
Всем привет! Есть вот такая проблема: при считывании данных из файла в объект ниоткуда берутся лишние данные. В чем может быть проблема? Вот пример файла: 1 1 1 2 2 2 А вот что получается когда считываю файл: 1 1 1 2 2 2 2 2 void output(Toys &T) { ifstream in("1.txt");
C++ в чем ошибка? http://www.cyberforum.ru/cpp-beginners/thread860967.html
Дано целое позитивное число n. Составить алгоритм вычисления суммы В чем ошибка в коде?#include <iostream> #include <conio.h> #include <math.h> #include <locale.h> using namespace std; //главная функция программы, с нее начинается выполнение int main()
C++ Задание на создание классов Дорогие коллеги! Помогите новичку разобраться с этим заданием! Задание на создание классов Данное задание предполагает создать базовый класс фигуры, указанный в задании класс и в нем реализовать заданную функцию. Приложение создается с графическим интерфейсом и реализует создание нескольких объектов заданного класса и тестирование заданной функции. Нужно: Разработать класс сектора Sector и... подробнее

Показать сообщение отдельно
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
28.05.2013, 22:12  [ТС]     Кодировки, вывод/ввод на консоль и в файл
Возвращаясь к старом. Поискал немного инфы в интернете и здесь на форуме и вот, поправил свой код. Нашел полезные функции по перекодировке символов. Теперь все вводы и выводы получились. Если что не так, поправьте. Вообщем, вот код, может кому надо будет:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>
 
// Convert a wide Unicode string to an UTF8 string
std::string utf8_encode(const std::wstring &wstr)
{
    int size_needed = WideCharToMultiByte(CP_ACP, 0, &wstr[0], (int)wstr.size(), NULL, 0, NULL, NULL);
    std::string strTo(size_needed, 0);
    WideCharToMultiByte                  (CP_ACP, 0, &wstr[0], (int)wstr.size(), &strTo[0], size_needed, NULL, NULL);
    return strTo;
}
 
// Convert an UTF8 string to a wide Unicode String
std::wstring utf8_decode(const std::string &str)
{
    int size_needed;
    if ((unsigned char)str[0] == 0xEF && (unsigned char)str[1] == 0xBB && (unsigned char)str[2] == 0xBF) //detect BOM
    {
        size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[3], (int)str.size()-3, NULL, 0);
        std::wstring wstrTo(size_needed, 0);
        MultiByteToWideChar              (CP_UTF8, 0, &str[3], (int)str.size()-3, &wstrTo[0], size_needed);
        return wstrTo;
    }
    else
    {
        size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
        std::wstring wstrTo(size_needed, 0);
        MultiByteToWideChar              (CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
        return wstrTo;
    }
}
 
int main ()
{
    setlocale(0, ".1251");
    
    std::ifstream ifs_UTF8_BOM("D:/UTF8_BOM.txt");
    std::ifstream ifs_UTF8("D:/UTF8.txt");
    std::ifstream ifs_ANSI("D:/ANSI.txt");
    
    std::string str_UTF8_BOM;
    std::string str_UTF8;
    std::string str_ANSI;
    
    std::getline(ifs_UTF8_BOM, str_UTF8_BOM);
    std::getline(ifs_UTF8, str_UTF8);
    std::getline(ifs_ANSI, str_ANSI);
    
    std::wstring wstr_UTF8_BOM(utf8_decode(str_UTF8_BOM));
    std::wstring wstr_UTF8(utf8_decode(str_UTF8));
 
    std::cout<<"Вывод str_ANSI:\t\t"<<str_ANSI<<std::endl;
    
    setlocale(0, "rus_rus.866");
    std::wcout<<"Вывод wstr_UTF8_BOM:\t"<<wstr_UTF8_BOM<<std::endl;
    std::wcout<<"Вывод wstr_UTF8:\t"<<wstr_UTF8<<std::endl;
   
    //############################################################
    
    setlocale(0, ".1251");
    SetConsoleCP (1251); SetConsoleOutputCP (1251); //иначе ввод русских символов в string будет не коректен
    
    std::string str;
    std::cout<<"\nВвод в консоле:\n";
    std::cout<<"string:-> "; std::getline(std::cin, str);
    std::cout<<"Вывод string: "<<str<<std::endl;
    
    //############################################################
    
    setlocale(0, ".1251");
    
    //выводим все в файл
    std::ofstream ofs("D:/results.txt", std::ios::ate); //файл будет в кодировке ANSI
    
    ofs<<"Вывод str_ANSI:\t\t\t\t\t\t\t"<<str_ANSI<<std::endl;
    ofs<<"Вывод wstr_UTF8_BOM(с перекодировкой):\t"<<utf8_encode(wstr_UTF8_BOM)<<std::endl;
    ofs<<"Вывод wstr_UTF8(с перекодировкой):\t\t"<<utf8_encode(wstr_UTF8)<<std::endl;
    ofs<<"Вывод строки введенной с консоли:\t\t"<<str<<std::endl;
    
    std::cout<<std::endl;
    return 0;
}
Попутно, два вопроса:
-почему это выбрасывает исключение?
C++
1
std::wcout.imbue(std::locale("rus_rus.866"));
-можно ли сразу задать тип кодировки при создании файла?
 
Текущее время: 06:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru