Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2011, 14:56   #1
fomikadze
Пользователь
 
Регистрация: 13.06.2011
Сообщений: 17
Лампочка Траслитерация

Добрый день.
Столкнулся с идеей транслитерации с кирилицы в латиницу. Но понятия не имею как это делается. Есть кто уже знакомый стаким. Можете подсказать идею того как это делается?
fomikadze вне форума Ответить с цитированием
Старый 23.06.2011, 15:29   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

с помощью таблиц (строк) перекодировки.
Берёте символ, находите в одной таблице, полученный индекс используете для получения значения из таблицы кодирования.

p.s. если знаете Паскаль, то можете посмотреть рабочий пример ЗДЕСЬ
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.06.2011, 07:03   #3
fomikadze
Пользователь
 
Регистрация: 13.06.2011
Сообщений: 17
Вопрос

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
с помощью таблиц (строк) перекодировки.
Берёте символ, находите в одной таблице, полученный индекс используете для получения значения из таблицы кодирования.p=342638&postcount=5"]ЗДЕСЬ[/URL]
Спасибо
Вот теперь встал перед другой проблемой, нужно создать двумерный символьный массив и забить его вручную. Массив создал, а вот вручную забить не получается, чет понять не могу что ему не нравится...
char engArr [2][33] = {{"a","b","v","g","d","e","yo","zh" ,"z","i","y",
"k","l","m","n","o","p","r","s","t" ,"u","f",
"kh","ts","ch","sh","shch","''","y" ,"'","e","yu","ya"},
{"A","B","V","G","D","E","Yo","Zh", "Z","I","Y",
"K","L","M","N","O","P","R","S","T" ,"U","F",
"Kh","Ts","Ch","Sh","Shch","''","Y" ,"'","E","Yu","Ya"}};
fomikadze вне форума Ответить с цитированием
Старый 24.06.2011, 07:28   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Зачем Вы используете тип char? Во-первых это однобайтный тип. Во-вторых, ним можно закодировать только латиницу.
Используйте тип string. Например так:
Код:
string engArr[33] = {};
или воспользуйтесь библиотекой STL, например так:
Код:
#include <list>
#include <string>
using namespace std;
list<string> engArr;
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.06.2011, 08:02   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Во-вторых, ним можно закодировать только латиницу.
глупости говорите.
string, на том же char основан.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.06.2011, 08:33   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
глупости говорите.
string, на том же char основан.
Основан. Но не тождественнен.
Это всё равно что сказать - дом основан на кирпичах.
В string используется кодировка Юникод. В частности UTF-8.
http://ru.wikipedia.org/wiki/%D0%AE%...BA%D0%BE%D0%B4
Работать с ним гораздо удобнее чем с char.
http://msdn.microsoft.com/ru-ru/libr...em.string.aspx
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 24.06.2011 в 08:39.
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.06.2011, 09:28   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Пепел Феникса, +1

Цитата:
В string используется кодировка Юникод. В частности UTF-8.
http://ru.wikipedia.org/wiki/....
Работать с ним гораздо удобнее чем с char.
Оп-па.. дожились...
по вашему, если Unicode нет - то кириллица не поддерживается?
Т.е. в DOSских программах/Win9x кириллицы вообще не было, так?!
и Delphi до версии 2009 тоже строки с кириллицей принимала, так по вашему?!

ответ. Это не так!
обычный однобайтовый Char может хранить значения от 0 до 255. Туда помещается как латиница, так и кириллица.. (ну, разумеется, в определённой кодовой таблице - что определяется условиями использования программы).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.06.2011, 09:30   #8
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Smitt&Wesson, std::string - это инстанцирование шаблона std::basic_string типом char, что к Unicode имеет отношение чуть более, чем никакое.
Автору советую использовать словарь (std::map), в данной ситуации это весьма удобно.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 24.06.2011, 09:39   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
В string используется кодировка Юникод. В частности UTF-8.
только в никсах, так как там основная кодировка системы UTF8.
если б в винде оно так же работало, это был бы ужас, ибо вечно перекодировать чуть-что.
кодировка будет зависить от того как вы внесли данные(в какой кодировке), string не телепат, и не знает в какой кодировке данные ей вносят, про char* ей известна лишь длина(по терминальному символу)
а терминал винды по умолчанию ждет 866 кодировку.

а вот wstring уже юникод(или как минимум не полноценный UCS2)
ну по крайней мере поидее
использовать не по назначению никто не мешает.

ссылка на System.String вообще не уместна, это dotNET.
да и ссылка на юникод тоже не нужна, отлично знаю что это такое.

кстати, ошибка ТС в том что тип массива задан неверно, ему надо или массив std::string(про удобство соглашусь) или же char*
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 24.06.2011 в 09:42.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.06.2011, 09:43   #10
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
только в никсах, так как там основная кодировка системы UTF8.
Как так? Переменные типа char занимают в памяти 1 байт (стандарт языка), а одним байтом Unicode не закодируешь.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц