Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
koka3000
11 / 11 / 5
Регистрация: 02.02.2011
Сообщений: 211
#1

Массив с русс буквами. - C++

02.02.2011, 19:12. Просмотров 2021. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2011, 19:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Массив с русс буквами. (C++):

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

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

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

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

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

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

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

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

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


При чем тут эти функции? У человека не компилируется. См. ссылку выше.
у меня всё нормально компилируется
0
koka3000
11 / 11 / 5
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 20:10  [ТС] #11
Wanee, у меня под виндой тоже нормально компилилось. А вот под линуксом..
0
Wanee
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 435
02.02.2011, 20:12 #12
Цитата Сообщение от koka3000 Посмотреть сообщение
Wanee, у меня под виндой тоже нормально компилилось. А вот под линуксом..
видемо что то прописывать нужно...
0
koka3000
11 / 11 / 5
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 20:12  [ТС] #13
Значит так. Оказывается все норм скомпилилось! Я когда увидел ошибки то сразу подумал что не норм скомпилилось. Но прога запустилась и там каразули. Ща попробую посты више.
0
Wanee
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 435
02.02.2011, 20:18 #14
ну как результат есть?
0
koka3000
11 / 11 / 5
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 20:28  [ТС] #15
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
Wanee
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 435
02.02.2011, 20:39 #16
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
koka3000
11 / 11 / 5
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 20:40  [ТС] #17
Ок. Да на эту. Спс за помощь.
0
qwarta
73 / 73 / 11
Регистрация: 20.11.2009
Сообщений: 238
02.02.2011, 23:49 #18
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
Wanee
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 435
03.02.2011, 15:46 #19
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 #20
У меня была такая же проблема (использую 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
04.02.2011, 11:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2011, 11:48
Привет! Вот еще темы с решениями:

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

Вывод русскими буквами
Вообщем в задачке нужно рассчитать всевозможные тройки ФИО. #include...

Помогите пожалуйста с буквами!
Я написал программу,что - то вроде калькулятора, но столкнулся с такой вот...

Заменить цифры, написанные буквами
Требуется написать консольное приложение, в котором пользователь должен вводить...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru