Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 02.02.2021
Сообщений: 12

Как подключить поддержку кириллицы в коде

05.12.2022, 13:33. Показов 3599. Ответов 22

Студворк — интернет-сервис помощи студентам
Приветствую всех!
Помогите пожалуйста понять, как заставить работать код в С++, если поменять "Hello World" на русское слово (любое) или набор русских букв. Подключение библиотеки locale.h и setlocale(LC_ALL, "RU") не помогает (ибо string задан через define). Программа при попытке изменить "Hello World!" любой кириллицей просто уходит в бесконечный цикл, без выдачи результата.

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <iostream>                 // для cout и т.п.
#include <vector>                   // для класса vector
#include <string>                   // для класса string
#include <algorithm>                    // для алгоритма сортировки
#include <time.h>                   // для случайных величин
#include <math.h>                   // для abs()
 
#define GA_POPSIZE      2048        // размер популяции
#define GA_MAXITER      16384       // максимальное число итераций
#define GA_ELITRATE     0.10f       // элитарность
#define GA_MUTATIONRATE 0.25f           // мутации
#define GA_MUTATION     RAND_MAX * GA_MUTATIONRATE
#define GA_TARGET       std::string("Hello world!")
 
using namespace std;                
 
struct ga_struct 
{
    string str;                     // строка
    unsigned int fitness;                   // пригодность
};
 
typedef vector<ga_struct> ga_vector;            // для краткости
 
void init_population(ga_vector &population,
                     ga_vector &buffer ) 
{
    int tsize = GA_TARGET.size();
 
    for (int i=0; i<GA_POPSIZE; i++) {
        ga_struct citizen;
        
        citizen.fitness = 0;
        citizen.str.erase();
 
        for (int j=0; j<tsize; j++)
            citizen.str += (rand() % 90) + 32;
 
        population.push_back(citizen);
    }
 
    buffer.resize(GA_POPSIZE);
}
 
void calc_fitness(ga_vector &population)
{
    string target = GA_TARGET;
    int tsize = target.size();
    unsigned int fitness;
 
    for (int i=0; i<GA_POPSIZE; i++) {
        fitness = 0;
        for (int j=0; j<tsize; j++) {
            fitness += abs(int(population[i].str[j] - target[j]));
        }
        
        population[i].fitness = fitness;
    }
}
 
bool fitness_sort(ga_struct x, ga_struct y) 
{ return (x.fitness < y.fitness); }
 
inline void sort_by_fitness(ga_vector &population)
{ sort(population.begin(), population.end(), fitness_sort); }
 
void elitism(ga_vector &population, 
                ga_vector &buffer, int esize )
{
    for (int i=0; i<esize; i++) {
        buffer[i].str = population[i].str;
        buffer[i].fitness = population[i].fitness;
    }
}
 
void mutate(ga_struct &member)
{
    int tsize = GA_TARGET.size();
    int ipos = rand() % tsize;
    int delta = (rand() % 90) + 32; 
 
    member.str[ipos] = ((member.str[ipos] + delta) % 122);
}
 
void mate(ga_vector &population, ga_vector &buffer)
{
    int esize = GA_POPSIZE * GA_ELITRATE;
    int tsize = GA_TARGET.size(), spos, i1, i2;
 
    elitism(population, buffer, esize);
 
    // Mate the rest
    for (int i=esize; i<GA_POPSIZE; i++) {
        i1 = rand() % (GA_POPSIZE / 2);
        i2 = rand() % (GA_POPSIZE / 2);
        spos = rand() % tsize;
 
        buffer[i].str = population[i1].str.substr(0, spos) + 
                        population[i2].str.substr(spos, esize - spos);
 
        if (rand() < GA_MUTATION) mutate(buffer[i]);
    }
}
 
inline void print_best(ga_vector &gav)
{ cout << "Best: " << gav[0].str << " (" << gav[0].fitness << ")" << endl; }
 
inline void swap(ga_vector *&population,
                 ga_vector *&buffer)
{ ga_vector *temp = population; population = buffer; buffer = temp; }
 
int main()
{
    srand(unsigned(time(NULL)));
 
    ga_vector pop_alpha, pop_beta;
    ga_vector *population, *buffer;
 
    init_population(pop_alpha, pop_beta);
    population = &pop_alpha;
    buffer = &pop_beta;
 
    for (int i=0; i<GA_MAXITER; i++) {
        calc_fitness(*population);      // вычисляем пригодность
        sort_by_fitness(*population);       // сортируем популяцию
        print_best(*population);        // выводим лучшую популяцию
 
        if ((*population)[0].fitness == 0) break;
 
        mate(*population, *buffer);     // спариваем популяции
        swap(population, buffer);       // очищаем буферы
    }
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2022, 13:33
Ответы с готовыми решениями:

как сделать поддержку кириллицы
Задача - посчитать количество вхождений каждого символа в файл. Символы записаны кириллицей. Есть код: #!/usr/bin/perl use...

Как добавить поддержку кириллицы в одну из библиотек по симуляции нажатия клавиш
В файле _pyautogui_osx.py библиотеки pyautogui есть такая строчка. Хочу узнать каким будет код для буквы 'л' подобный 0x01 и как...

Как подключить поддержку стандарта С++11 в gcc
Как подключить поддержку стандарта С++11 в gcc. Не могу скомпилировать программу.

22
0 / 0 / 0
Регистрация: 02.02.2021
Сообщений: 12
07.12.2022, 16:37  [ТС]
Студворк — интернет-сервис помощи студентам
drfaust, я до этого туда и вставлял, ахах, просто написал с уточнением в этот раз
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
07.12.2022, 18:14
Цитата Сообщение от drfaust Посмотреть сообщение
А куда ты пробовал вставлять
Он вставил в код, который я исправил.
Изначально же дело было не в setlocale.
1
0 / 0 / 0
Регистрация: 02.02.2021
Сообщений: 12
08.12.2022, 06:15  [ТС]
DrOffset, да, все верно. Еще раз спасибо за код!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.12.2022, 06:15

Как ввести полную поддержку юникода в коде, чтобы не писать префикс
Как ввести полную поддержку юникода в коде Чтобы не писать постоянно префикс

Подключить поддержку стандарта C99 компилятором
Здравствуйте. Стоит MinGW. Версия 4.6.2 Проблема в том, что мой MinGW не поддерживает C99. Как подключить C99?

Не могу подключить поддержку модулей в Visual Studio 2022 preview
Привет Не могу включить поддержку модулей в Visual Studio 2022 preview. Выдает вот такие ошибки: warning C5050: Возможная несовместимая...

Использование кириллицы в коде C#
Собственно вопрос для всех. Когда-то давным-давно когда Делфи был круче VS, а я был мал и глуп, кириллица в коде и в объявлениях переменных...

Как в коде подключить веб-службу?
Добрый день. Есть ли возможность подключать через код C# веб службы для дальнейшей генерации клиента к этой службе и использования?( можно...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru