С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

как вывести русскими буквами слово С++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Бинарные файлы. Написать функцию, которая записывает в бинарный файл N случайных вещественных чисел в указанном диапазоне http://www.cyberforum.ru/cpp-beginners/thread1103785.html
Добрый день! Подскажите пожалуйста! Генерирую рандомное кол-во вещественных чисел, и записываю их в бинарный файл, после чего читаю оттуда. Не могу понять в чем проблема, т.к. не работает...
C++ Олимпиадно-школьные квесты Накидайте плиз олимпиадных заданий для 10-11 классов. http://www.cyberforum.ru/cpp-beginners/thread1103780.html
Метод Холецкого C++
Здравствуйте.Очень нужна ваша помощь! нашёл методу ,по которой можно написать решение СЛАУ методом Холецкого.Полностью из неё все и взял.Но почему-то код не работает. #include<iostream>...
std::move() C++
Есть ли разница между следующими вещами: A = std::move(B); // and std::copy(B.begin(), B.end(), A.begin()); B.clear();
C++ множественное наследование http://www.cyberforum.ru/cpp-beginners/thread1103746.html
Почему не компилируется код? #include <iostream> #include <conio.h> #include <string.h> using namespace std; class computer_screen{ public: computer_screen(char*, long, int, int);
C++ Работа с 2 конструкторами Добрый день. Дали задачу. У меня есть 1 класс который имел 2 поля. И сотню различных математических функций. Мне сказали добавить в него 2 конструктора. 1 конструктор будет инициализировать 1... подробнее

Показать сообщение отдельно
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
24.02.2014, 15:12
Цитата Сообщение от sergei60 Посмотреть сообщение
может в коде что не так?
Проблема в том, что в UTF-8 символ может кодироваться несколькими байтами. И это точно так в случае русских букв. Переворачивая строку таким образом вы нарушаете порядок байтов.
Попробую сейчас набросать пример правильного разворота.

Добавлено через 15 часов 36 минут
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
#include <iostream>
#include <algorithm>
 
template <typename IteratorT>
IteratorT reverse_array(IteratorT begin, IteratorT end)
{
    const size_t len = std::distance(begin, end);
    for(size_t i = 0; i < len / 2; ++i)
    {
       std::swap(*(begin + i), *(begin + (len - i - 1)));
    }
    return begin;
}
 
template <typename IteratorT>
IteratorT reverse_utf8(IteratorT begin, IteratorT end)
{
    // обычный разворот
    reverse_array(begin, end);
    while(begin < --end)
    {
        // выправим последовательности
        switch((*end & 0xF0) >> 4)
        {
        case 0xC: /* control */
        case 0xD: // два байта, U+000080-U+0007FF
            std::swap(*end, *(end - 1));
            end -= 1;
            break;
        case 0xE: // три байта, U+000800-U+00FFFF
            std::swap(*end, *(end - 2));
            end -= 2;
            break;
        case 0xF: // четыре байта, U+010000-U+10FFFF
            std::swap(*end,       *(end - 3));
            std::swap(*(end - 1), *(end - 2));
            end -= 3;
            break;
        }
    }
    return begin;
}
int main()
{
    std::string word;
    std::cin >> word;
    reverse_utf8(word.begin(), word.end());
    std::cout << word << "\n";
    return 0;
}
Записывает разворот в ту же строку.
Вообще я бы не рекомендовал писать такие велосипеды, лучше воспользоваться готовыми средствами.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.