Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Кириллица C++.  (Прочитано 6251 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн CitiЯen

  • Автор темы
  • Участник
  • *
  • Сообщений: 138
  • Ubuntu Natty + OB
    • Просмотр профиля
Кириллица C++.
« : 26 Декабря 2010, 15:29:42 »
Здравствуйте. Как сделать массив из русских символов под Ubuntu в C++? Вот кусок кода:
// Данная программа реализует шифр Цезаря без ключевого слова

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

main ()

{

using namespace std;

// Количество символов в алфавите
const int nCountSymbols = 27;
// Исходный алфавит
wchar_t cABC[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' '};
// Шифрованный алфавит
wchar_t cEncryptedABC[nCountSymbols];
Данный пример работает с английскими буквами, но с русскими никак.
Пока не получилось найти простого и внятного решения. А вот, что валится в консоль при компиляции:
Cesar_file.cpp:16:24: warning: multi-character character constant
« Последнее редактирование: 26 Декабря 2010, 18:55:15 от CitiЯen »

Оффлайн __v1tos

  • Участник
  • *
  • Сообщений: 105
  • Ubuntuu 10.10 x86-64
    • Просмотр профиля
Re: Кириллица C++. Использую g++ 4:4.4.3-1ubuntu1
« Ответ #1 : 26 Декабря 2010, 15:33:45 »
Чем компилируете?
AMD Phenom II 945, GA-MA790GPT-UD3H (HD 3300), 5 GiB ram

Оффлайн CitiЯen

  • Автор темы
  • Участник
  • *
  • Сообщений: 138
  • Ubuntu Natty + OB
    • Просмотр профиля
Re: Кириллица C++. Использую g++ 4:4.4.3-1ubuntu1
« Ответ #2 : 26 Декабря 2010, 15:43:52 »
Пакет: g++
Новый: да
Состояние: установлен
Автоматически установлен: да
Версия: 4:4.4.3-1ubuntu1

g++ Cesar_file.cpp -o Cesar_file
Как-то так.

Оффлайн __v1tos

  • Участник
  • *
  • Сообщений: 105
  • Ubuntuu 10.10 x86-64
    • Просмотр профиля
Re: Кириллица C++. Использую g++ 4:4.4.3-1ubuntu1
« Ответ #3 : 26 Декабря 2010, 15:50:23 »
Не знаю как с wchar_t, но с char должно работать
AMD Phenom II 945, GA-MA790GPT-UD3H (HD 3300), 5 GiB ram

Оффлайн CitiЯen

  • Автор темы
  • Участник
  • *
  • Сообщений: 138
  • Ubuntu Natty + OB
    • Просмотр профиля
Re: Кириллица C++. Использую g++ 4:4.4.3-1ubuntu1
« Ответ #4 : 26 Декабря 2010, 16:13:29 »
Не может т.к. кодировка символов UTF-8 по дефолту => размер русского символа 2 байта, а char - 1

Оффлайн __v1tos

  • Участник
  • *
  • Сообщений: 105
  • Ubuntuu 10.10 x86-64
    • Просмотр профиля
Re: Кириллица C++. Использую g++ 4:4.4.3-1ubuntu1
« Ответ #5 : 26 Декабря 2010, 16:34:23 »
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
int main()
{
wchar_t ws[30];
char cs[40];
char *hello = "Прыфет всемэ";


setlocale(LC_CTYPE, "");
mbstowcs(ws, hello, 30);
wcstombs(cs, ws, 40);


printf("\n%s__size=%ld\n%ls___size=%ld\n%s", hello, strlen(hello), ws, wcslen(ws), cs );
  
  
    return 0;
}
AMD Phenom II 945, GA-MA790GPT-UD3H (HD 3300), 5 GiB ram

Оффлайн CitiЯen

  • Автор темы
  • Участник
  • *
  • Сообщений: 138
  • Ubuntu Natty + OB
    • Просмотр профиля
Re: Кириллица C++. Использую g++ 4:4.4.3-1ubuntu1
« Ответ #6 : 26 Декабря 2010, 16:46:32 »
Спасибо. Сейчас испытаю

Пользователь решил продолжить мысль 26 Декабря 2010, 16:51:08:
ad.cpp: In function ‘int main()’:
ad.cpp:8: warning: deprecated conversion from string constant to ‘char*’
ad.cpp:12: error: ‘mbstowcs’ was not declared in this scope
ad.cpp:13: error: ‘wcstombs’ was not declared in this scope
ad.cpp:16: error: ‘strlen’ was not declared in this scope

Может еще что-то нужно подключить? У Вас этот код работает корректно?
« Последнее редактирование: 26 Декабря 2010, 16:51:08 от CitiЯen »

Оффлайн __v1tos

  • Участник
  • *
  • Сообщений: 105
  • Ubuntuu 10.10 x86-64
    • Просмотр профиля
Re: Кириллица C++. Использую g++ 4:4.4.3-1ubuntu1
« Ответ #7 : 26 Декабря 2010, 16:53:44 »
Пардон, в одном файле куча проектов Гы :)

stdlib.h
string.h
AMD Phenom II 945, GA-MA790GPT-UD3H (HD 3300), 5 GiB ram

Оффлайн CitiЯen

  • Автор темы
  • Участник
  • *
  • Сообщений: 138
  • Ubuntu Natty + OB
    • Просмотр профиля
Re: Кириллица C++. Использую g++ 4:4.4.3-1ubuntu1
« Ответ #8 : 26 Декабря 2010, 17:01:20 »
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
wchar_t ws[30];
char cs[40];
char *hello = "Прыфет всемэ";


setlocale(LC_CTYPE, "");
mbstowcs(ws, hello, 30);
wcstombs(cs, ws, 40);


printf("\n%s__size=%ld\n%ls___size=%ld\n%s", hello, strlen(hello), ws, wcslen(ws), cs );
   
   
    return 0;
}

В таком виде ошибок поменьше, но все же есть.
ad.cpp: In function ‘int main()’:
ad.cpp:10: warning: deprecated conversion from string constant to ‘char*’
ad.cpp:18: error: ‘strlen’ was not declared in this scop

Оффлайн __v1tos

  • Участник
  • *
  • Сообщений: 105
  • Ubuntuu 10.10 x86-64
    • Просмотр профиля
Re: Кириллица C++. Использую g++ 4:4.4.3-1ubuntu1
« Ответ #9 : 26 Декабря 2010, 17:13:33 »
string.h
AMD Phenom II 945, GA-MA790GPT-UD3H (HD 3300), 5 GiB ram

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Кириллица C++.
« Ответ #10 : 27 Декабря 2010, 08:34:36 »
yurik@yurik-pc:~/test$ cat wide.c
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>
#include <stdio.h>

int main()
{
    wchar_t str[] = { L'Х', L'е', L'л', L'л', L'о', L'у', L',', L' ', L'в', L'о', L'р', L'л', L'д', L'\0'};
    setlocale(LC_ALL, "");
    wprintf(L"Это есть русский языка: \"%ls\"\n", str);
    return EXIT_SUCCESS;
}
yurik@yurik-pc:~/test$ gcc -Wall -Wextra -pedantic -o wide wide.c
yurik@yurik-pc:~/test$ ./wide
Это есть русский языка: "Хеллоу, ворлд"
yurik@yurik-pc:~/test$

Оффлайн CitiЯen

  • Автор темы
  • Участник
  • *
  • Сообщений: 138
  • Ubuntu Natty + OB
    • Просмотр профиля
Re: Кириллица C++.
« Ответ #11 : 28 Декабря 2010, 16:41:46 »
Yurror огромнейшее Спасибо.)) То что доктор прописал)

 

Страница сгенерирована за 0.145 секунд. Запросов: 25.