Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
koka3000
11 / 11 / 3
Регистрация: 02.02.2011
Сообщений: 211
#1

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

02.02.2011, 19:12. Просмотров 1708. Ответов 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
...
и тд..


как можно избавиться от ошибок что бы можно было писать в массиве по русски? ( когда слова пишу по англ то все ок).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2011, 19:12     Массив с русс буквами.
Посмотрите здесь:

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

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

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

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

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

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

Вывод русскими буквами - C++
Вообщем в задачке нужно рассчитать всевозможные тройки ФИО. #include <iostream> #include <conio.h> #include <cstring> #include...

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

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

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


При чем тут эти функции? У человека не компилируется. См. ссылку выше.
у меня всё нормально компилируется
koka3000
11 / 11 / 3
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 20:10  [ТС]     Массив с русс буквами. #11
Wanee, у меня под виндой тоже нормально компилилось. А вот под линуксом..
Wanee
53 / 53 / 13
Регистрация: 02.02.2011
Сообщений: 427
02.02.2011, 20:12     Массив с русс буквами. #12
Цитата Сообщение от koka3000 Посмотреть сообщение
Wanee, у меня под виндой тоже нормально компилилось. А вот под линуксом..
видемо что то прописывать нужно...
koka3000
11 / 11 / 3
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 20:12  [ТС]     Массив с русс буквами. #13
Значит так. Оказывается все норм скомпилилось! Я когда увидел ошибки то сразу подумал что не норм скомпилилось. Но прога запустилась и там каразули. Ща попробую посты више.
Wanee
53 / 53 / 13
Регистрация: 02.02.2011
Сообщений: 427
02.02.2011, 20:18     Массив с русс буквами. #14
ну как результат есть?
koka3000
11 / 11 / 3
Регистрация: 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;
}
Wanee
53 / 53 / 13
Регистрация: 02.02.2011
Сообщений: 427
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 минуту
Давай я завтра покопаюсь да поспрашиваю и тебе скажу. Если найду то завтра на эту страничку выкину?
koka3000
11 / 11 / 3
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 20:40  [ТС]     Массив с русс буквами. #17
Ок. Да на эту. Спс за помощь.
qwarta
70 / 70 / 7
Регистрация: 20.11.2009
Сообщений: 234
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;
}
Wanee
53 / 53 / 13
Регистрация: 02.02.2011
Сообщений: 427
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 минут
Чуть по поже скину второй способ.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2011, 11:48     Массив с русс буквами.
Еще ссылки по теме:

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

Дописать string буквами char[i] - C++
1) Есть функция разбирающая строку. Необходимо при определённом условии, в цикле, дописать в новую строку (string prep) текущим символом...

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

Вывод слов с удвоенными буквами - C++
Здравствуйте. В общем задача такая: В произвольном тексте содержащем не более 10 строк, в каждой строке не более 80 символов, найти и...

Вершины графа выводить буквами - C++
Добрый день Помогите пожалуйста с задачей обхода графа в ширину Есть граф с 6 вершинами от 1 до 6 После обхода результат - met...


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

Или воспользуйтесь поиском по форуму:
maks_IQ
21 / 21 / 0
Регистрация: 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;
Yandex
Объявления
04.02.2011, 11:48     Массив с русс буквами.
Ответ Создать тему
Опции темы

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