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

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

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

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++ Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в другом файле тот же текст, записанный заглавными буквами
C++ заполнить массив случайно буквами c++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
 Аватар для 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
52 / 52 / 13
Регистрация: 02.02.2011
Сообщений: 428
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
 Аватар для 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++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
02.02.2011, 19:55     Массив с русс буквами. #6
zulkis, Wanee, у человека при компиляции проблемы, указанные же Вами функции никоем образом на компилятор не влияют.
Wanee
52 / 52 / 13
Регистрация: 02.02.2011
Сообщений: 428
02.02.2011, 19:59     Массив с русс буквами. #7
Цитата Сообщение от koka3000 Посмотреть сообщение
zulkis, не хочет работать.
Wanee, ну таких же в линуксе библиотек нету.
да таких нет. Попробуй найти что нибудь похожее. А лучше перекодировать сообщение перед выводом
ведь проблемма именно в кодировке. в консольном приложений кодировка asc||. и из за этого вся проблемма.

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

Цитата Сообщение от Wanee Посмотреть сообщение
эти функции работают на Windows я сразу сказал
При чем тут эти функции? У человека не компилируется. См. ссылку выше.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
02.02.2011, 20:05     Массив с русс буквами. #9
Мб посоветуешь чтолибо ?
Wanee
52 / 52 / 13
Регистрация: 02.02.2011
Сообщений: 428
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
52 / 52 / 13
Регистрация: 02.02.2011
Сообщений: 428
02.02.2011, 20:12     Массив с русс буквами. #12
Цитата Сообщение от koka3000 Посмотреть сообщение
Wanee, у меня под виндой тоже нормально компилилось. А вот под линуксом..
видемо что то прописывать нужно...
koka3000
11 / 11 / 3
Регистрация: 02.02.2011
Сообщений: 211
02.02.2011, 20:12  [ТС]     Массив с русс буквами. #13
Значит так. Оказывается все норм скомпилилось! Я когда увидел ошибки то сразу подумал что не норм скомпилилось. Но прога запустилась и там каразули. Ща попробую посты више.
Wanee
52 / 52 / 13
Регистрация: 02.02.2011
Сообщений: 428
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
52 / 52 / 13
Регистрация: 02.02.2011
Сообщений: 428
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
 Аватар для qwarta
56 / 56 / 5
Регистрация: 20.11.2009
Сообщений: 213
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
52 / 52 / 13
Регистрация: 02.02.2011
Сообщений: 428
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++ Как заполнить массив буквами английского алфавита ?
C++ c++ вывод рускими буквами
{SetConsoleCP(1251); SetConsoleOutputCP(1251); сломал русс шрифт C++

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

Или воспользуйтесь поиском по форуму:
maks_IQ
 Аватар для 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     Массив с русс буквами.
Ответ Создать тему
Опции темы

Текущее время: 20:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru