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

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

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

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

02.02.2011, 19:12. Просмотров 1763. Ответов 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++
Дан двумерный массив словаря, почему не работает с русскими буквами, а работает только с английскими, помогите разобраться: #include...

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Wanee
54 / 54 / 13
Регистрация: 02.02.2011
Сообщений: 430
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
73 / 73 / 7
Регистрация: 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;
}
Wanee
54 / 54 / 13
Регистрация: 02.02.2011
Сообщений: 430
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 минут
Чуть по поже скину второй способ.
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;
Wanee
54 / 54 / 13
Регистрация: 02.02.2011
Сообщений: 430
04.02.2011, 13:20 #21
maks_IQ, это функция для перекодтровки, она работает на Windows. Какую библеотеку нужна в Linux?
vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
04.02.2011, 14:24 #22
стандартно в консоли у вас кодировка UTF-8, просто сохраните файл в той же кодировке. и как уже было сказано выше - любая строка завершается спец символом '\0'.

Добавлено через 8 минут
Bash
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
vx5@Dev:~$ cat 123.cpp
#include<iostream>
#include<cstdlib>
 
using std::cout;
using std::endl;
using std::cin;
using std::rand;
using std::srand;
 
int main()
{
        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;
}
vx5@Dev:~$ g++ 123.cpp
vx5@Dev:~$ ./a.out
Hello user how you do you dв
UTF-8 у меня тоже не хочет выводит русский, а вот в KOI8R все получилось.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2011, 14:24
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.02.2011, 14:24
Ответ Создать тему
Опции темы

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