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

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

05.12.2022, 13:33. Показов 3434. Ответов 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
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
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
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru