Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
11 / 11 / 5
Регистрация: 02.02.2011
Сообщений: 211

Массив с русс буквами.

02.02.2011, 19:12. Показов 5281. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу программу в линуксе.

C++
1
2
3
4
5
int main()
{
     char slova[10] = { 'в',' д',' й',' х',' ч',' я',' т',' к',' д',' ж' };
     return 0;
}
Компилю.
g++ main.cpp -o start
При компиляя выдает ошибки:
warning: overflow in implicit constant conversion
...
и тд..


как можно избавиться от ошибок что бы можно было писать в массиве по русски? ( когда слова пишу по англ то все ок).
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.02.2011, 19:12
Ответы с готовыми решениями:

Заполнить массив случайно буквами
как заполнить массив случайно буквами c++ . Можете дать простенький пример, я бы потом как-то разобрался.

Как заполнить массив буквами английского алфавита ?
26 букв Добавлено через 48 секунд с помощью цикла for и по порядку ! Заранее спасибо!

Массив словаря почему-то не работает с русскими буквами
Дан двумерный массив словаря, почему не работает с русскими буквами, а работает только с английскими, помогите разобраться: #include...

21
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
02.02.2011, 19:16
std::locale loc("russian_Russia.866");
locale::global(loc);
Но это как вариант. Если я правильно понял, что не хочет кушать русские буквы...
0
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
02.02.2011, 19:19
Это связанно с кодировкой. Не знаю как в линуксе в windows приходилось приходилось делать так...
C++
1
2
3
4
5
6
#include <windows.h>
 
void main()
{
    setlocale(LC_ALL, "Russian");
}
После можно было спокойно писать на русском.
0
11 / 11 / 5
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 19:38  [ТС]
zulkis, не хочет работать.
Wanee, ну таких же в линуксе библиотек нету.
0
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
02.02.2011, 19:44
А так:
C++
1
setlocale(LC_ALL, "koi-8r");
И в догонку:
man setlocale
Могу наврать в синтаксисе, ибо я не сталкивался с русским языком там.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
02.02.2011, 19:55
zulkis, Wanee, у человека при компиляции проблемы, указанные же Вами функции никоем образом на компилятор не влияют.
0
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
02.02.2011, 19:59
Цитата Сообщение от koka3000 Посмотреть сообщение
zulkis, не хочет работать.
Wanee, ну таких же в линуксе библиотек нету.
да таких нет. Попробуй найти что нибудь похожее. А лучше перекодировать сообщение перед выводом
ведь проблемма именно в кодировке. в консольном приложений кодировка asc||. и из за этого вся проблемма.

Добавлено через 3 минуты
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
zulkis, Wanee, у человека при компиляции проблемы, указанные же Вами функции никоем образом на компилятор не влияют.
эти функции работают на Windows я сразу сказал.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
02.02.2011, 20:01
Цитата Сообщение от Wanee Посмотреть сообщение
ведь проблемма именно в кодировке.
Кодировка тут не причем: http://codepad.org/1UcGbDaK

Цитата Сообщение от Wanee Посмотреть сообщение
эти функции работают на Windows я сразу сказал
При чем тут эти функции? У человека не компилируется. См. ссылку выше.
0
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
02.02.2011, 20:05
Мб посоветуешь чтолибо ?
0
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
02.02.2011, 20:05
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Кодировка тут не причем: http://codepad.org/1UcGbDaK


При чем тут эти функции? У человека не компилируется. См. ссылку выше.
у меня всё нормально компилируется
0
11 / 11 / 5
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 20:10  [ТС]
Wanee, у меня под виндой тоже нормально компилилось. А вот под линуксом..
0
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
02.02.2011, 20:12
Цитата Сообщение от koka3000 Посмотреть сообщение
Wanee, у меня под виндой тоже нормально компилилось. А вот под линуксом..
видемо что то прописывать нужно...
0
11 / 11 / 5
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 20:12  [ТС]
Значит так. Оказывается все норм скомпилилось! Я когда увидел ошибки то сразу подумал что не норм скомпилилось. Но прога запустилась и там каразули. Ща попробую посты више.
0
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
02.02.2011, 20:18
ну как результат есть?
0
11 / 11 / 5
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 20:28  [ТС]
C++
1
2
3
#include<locale>
...
setlocale(LC_ALL, "koi-8r"); // or UTF-8
Всеравно пишет каракули.



Вот полный код программи. Может попробуйте у себя скомпилить.
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
#include<iostream>
using std::cout;
using std::endl;
using std::cin;
 
#include<cstdlib>
using std::rand;
using std::srand;
 
#include<locale>
using std::setlocale;
 
int main()
{
    setlocale(LC_ALL, "koi-8r"); // or UTF-8
    int Csize = 10;
    int Ssize = 10;
 
    const char Sdb[10][10] = {
    {'H','e','l','l','o','\0' },
    {'u','s','e','r','\0'},
    {'h','o','w','\0'},
    {'y','o','u','\0'},
    {'d','o','\0',},
    {'y','o','u','\0'},
    {'d','в','\0'} };
 
    for ( int cont1 = 0; cont1 < Ssize; cont1++ )
    {
        for ( int cont2 = 0; Sdb[cont1][cont2] != '\0'; cont2++ )
            cout << Sdb[cont1][cont2];
    cout << " ";
    }
    cout << endl;
    return 0;
}
0
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
02.02.2011, 20:39
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
#include<iostream>
#include<cstdlib> 
#include<locale>
using namespace std;
 
void main()
{
        setlocale(LC_ALL, "koi-8r");
        int Csize = 10;
        int Ssize = 10;
 
        const char Sdb[10][10] = {
        {'H','e','l','l','o','\0' },
        {'u','s','e','r','\0'},
        {'h','o','w','\0'},
        {'y','o','u','\0'},
        {'d','o','\0',},
        {'y','o','u','\0'},
        {'d','в','\0'} };
 
        for ( int cont1 = 0; cont1 < Ssize; cont1++ )
        {
                for ( int cont2 = 0; Sdb[cont1][cont2] != '\0'; cont2++ )
                        cout << Sdb[cont1][cont2];
        cout << " ";
        }
 
        cin.get();
}
вот так компилирует, но все равно цушь выводит

Добавлено через 1 минуту
у меня линуса нет. Я могу только на windows посмотреть

Добавлено через 1 минуту
Давай я завтра покопаюсь да поспрашиваю и тебе скажу. Если найду то завтра на эту страничку выкину?
1
11 / 11 / 5
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 20:40  [ТС]
Ок. Да на эту. Спс за помощь.
0
 Аватар для qwarta
73 / 73 / 11
Регистрация: 20.11.2009
Сообщений: 238
02.02.2011, 23:49
koka3000,
1.
C++
1
2
3
4
5
int main()
{
     char slova[10] = { 'в',' д',' й',' х',' ч',' я',' т',' к',' д',' ж' };
     return 0;
}
При компиляя выдает ошибки:
warning: overflow in implicit constant conversion
А что Вы хотели? Строка должна заканчиваться нулевым символом. Где он у Вас?
2. По поводу русских символов: предполагаю не соответствие кодировок консоли и редактора (системы ). Но лучше обратится в раздел форума по Linux'у, с указанием используемого дистрибутива.

Добавлено через 39 минут
Хотя нет, вот такой код отрабатывает нормально:
C
1
2
3
4
5
6
#include <stdio.h>
int main(void)
{
   printf("Привет, Друг!\n");
   return 0;
}
0
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
03.02.2011, 15:46
koka3000 проблема состоит в том, что Visual Studio - Windows-приложение, поэтому использует кодировку Windows, а консольные приложения выполняются в DOS-окне, в котором другая кодировка.

Поздние версии Visual Studio поддерживают библиотеку locale, которая может настраивать кодировку выходного потока.
Выглядит это так:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <locale>
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "rus");
    cout << "Текст по-русски"<<endl;
 
    cin.get();
}
Что касается линукса. Не знаю, не пробовал. В принципе, это стандарт языка. Отличаться может второй аргумент функции setlocale. Но не все инструментальные среды соблюдают стандарт полностью, особенно его новшества.
Если не поможет дай знать, есть еще одна идея.

Добавлено через 5 минут
Чуть по поже скину второй способ.
0
 Аватар для maks_IQ
21 / 21 / 1
Регистрация: 05.01.2011
Сообщений: 173
04.02.2011, 11:48
У меня была такая же проблема (использую Visual Studio), не хотели выводиться русские буквы, вместо них выводились каракули. Порылся в справочниках, и нашел решение:

C++
1
2
3
4
5
char* rus_in(char str[])
{
    OemToCharA(str,str);
    return str;
}
функция принимает массив символов и с помощью OemToCharA переводит в нормальный, читаемый формат.
Использовать так:
C++
1
2
3
4
5
char a[1000];
cout<<"Введите слово на русском\n";
    cin.get(a, 1000);
    strcpy_s(a, rus_in(a));
    cout<<a;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.02.2011, 11:48
Помогаю со студенческими работами здесь

Отсортировать массив с буквами в обратном порядке чем в алфавите
Отсортировать массив с буквами в обратном порядке чем в алфавите

{SetConsoleCP(1251); SetConsoleOutputCP(1251); сломал русс шрифт
получилось так что скомпилил и запустил программу со строкой {SetConsoleCP(1251); SetConsoleOutputCP(1251); теперь...

Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в другом файле тот же текст, записанный заглавными буквами
Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в другом файле тот же текст, записанный заглавными буквами.

Сформировать из значений массива другой массив, расположив в нем сначала цифры, затем – буквы, затем - символы, не являющихся ни буквами, ни цифрами
Создать массив из 20 символьных значений. Сформировать из его значений другой массив, расположив в нем сначала цифры, затем – буквы, затем...

Извлечение слов и их распределение на категории: из русс. букв, из англ. букв, из русс. и англ. букв, слова схожие по начертанию букв с русс и англ.
В тексте содержатся русские и англ слова. разделить все слова на 3 списка: русские слова, англ слова, слова, происхождения которых нельзя...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru