|
|
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Пусть простит меня Феникс (т.к это библиотека с его сайта ) , долго искавши эту библиотеку я все же ее нашел , и как я знаю здесь много людей которые хотели б получить эту библеотеку , с радостью ее вылаживаю вам , всем на_СИ_льщикам . http://ifolder.ru/2355638 этот файл нужно закинуть в ту папку где все библиотеки С++. Использовать так : #include <iostream.h> #include <printf_rus.h> int main () { printf_rus("Текст на русском "); return 0; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2007, 01:27 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
извени за повтор 2 тем ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2007, 01:38 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
О дааа библиотека жизненно необходимая БуГаГа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2007, 08:03 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Посмотрел реализацию. Долго плакалъ пацтулом Не гневи народ, не выкладывай [censored] да еще в таком количестве екземпляров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2007, 08:09 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
А не проще..? #include <locale.h> ... setlocale( LC_CTYPE, "Russian_Russia.866" ); printf("фываолдж"); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2007, 08:37 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
crazydownА не проще..?выложенное гавнище, я так понял, делает перекодировку из ср1251 в ср866. Феникса запереть в психушке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2007, 12:34 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
тут еще важно КАК оно это делает перед психушкой предлагаю кастрировать (на всякий случай) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2007, 12:39 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Cупер одоренным можно было не ответчать на эту тему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2007, 00:10 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
crazydownА не проще..? #include <locale.h> ... setlocale( LC_CTYPE, "Russian_Russia.866" ); printf("фываолдж"); Ты сам пробывал делать так как ты написал , только что попробывал ,неработает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2007, 00:16 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Вы вообще все молодцы ... , когда я спрашивал никто не знает знает , а когда выкладываю еще и гоните )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2007, 00:20 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Guitarboy wrote: > Вы вообще все молодцы ... , когда я спрашивал никто не знает знает , а > когда выкладываю еще и гоните )))) Обижаться смысла нету, "библиотека" полное г... А теперь объясняю, почему. 1) Объявлять целиком не-инлайн функции в заголовках - дурной тон. 2) Да ещё и с using namespace std - это может к достаточно интересным проблемам в коде привести, который "библиотеку" используеют. 3) Использовать "case" для перекодировки - это, извините, идиотизм. Можно было сделать другие, более удобные варианты, например создать статический массив 256 байт размером, где коду кодировки cp1251 будет соответствовать код коидровки cp866. Если жалко 256байт, то можно было (поплатившись скоростью) ввести две строки одинаковой длины с русским алфавитом - и, найдя символ в первой строки, вставлять символ из второй. Можно было взять двоичный поиск. Можно было офигеть (хотя это могло бы быть очень элегантно) и использовать std::map или нечто вроде него. Кстати, каждый вариант был бы короче на порядок. 4) Нету поддержки printf - вот нафига оно без этого? 5) Ну, и кроме того (сильно сомневаюсь, что вы именно ДОСом пользуюетесь - есть функции типа AnsiToOem, и т.д. и т.п. 6) Можно было воспользоваться способом, предложенным crazydown'ом, а ежели "не пашет", то тогда, блин, лезем в документацию и читаем её до нахождения корректного объявления нужной локали. 7) Можно было взять и перекодировать все исходники в cp866 при помощи Far (F4, Ctrl+A, Shift+Del, F8, Shift+Insert), либо утилиты recode (recode cp1251..cp866 <1.c >2.c) и т.д. и т.п. 8) Что, блин, за "библиотека" в один файл? Где *.lib, *.c и прочее? В *.h выкладываются объявления классов, заголовки функций extern переменные, но не функции целиком. 9) Include guard где? (#ifndef STUPID_LIBRARY #define STUPID_LIBRARY #endif) Если этот файлик будет использоваться более чем одним *.c* файлом, то вполне возможна ситуация когда компилиться не будет (symbol blablabla already defined in kajhgsdkfahgk.obj). Вывод. Если автор на C++ программит не второй раз в жизни, то руки ему поотрывать, дабы будущих программеров не портил. ЗЫ. Следите за орфограией, плиз. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2007, 02:59 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
ErV Guitarboy wrote: > Вы вообще все молодцы ... , когда я спрашивал никто не знает знает , а > когда выкладываю еще и гоните )))) Обижаться смысла нету, "библиотека" полное г... Posted via ActualForum NNTP Server 1.4 хе , библиотеку можно обозвать поразному , а слабо зделать лучше и сюда выложить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2007, 04:17 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
2Guitarboy main.cpp: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. win2dos.h: Код: plaintext 1. 2. 3. 4. 5. 6. win2dos.cpp: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Makefile: Код: plaintext 1. 2. 3. Guitarboy wrote: > а слабо зделать лучше и сюда выложить ? А слабо книжку взять, почитать чуть- чуть и самому собрать? Али умеем только обижаться и народ на "слабо" подкалывать? Если не пашет - меняй таблицу перекодировки, у меня Windows нету, системная кодировка koi8-r. По таблицам кодировки ищи гуглом. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2007, 05:12 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Ну и само собой, ни одна подобная "библиотека" не спасет, если у пользователя консоль не в cp866, а исходники не в cp1251. Так что правильней будет пользоваться setLocale. RTFM, короче. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2007, 06:16 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
ErV А слабо книжку взять, почитать чуть- чуть и самому собрать? Али умеем только обижаться и народ на "слабо" подкалывать? Если не пашет - меняй таблицу перекодировки, у меня Windows нету, системная кодировка koi8-r. По таблицам кодировки ищи гуглом. Может быть сразу книжку подскажеш, я вообще начинаю с++шник и могу неразобраться , но могу попытаться . и я не обижаюсь , просто когда эта тема была в прошлый раз , никто толком на нее не ответил . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2007, 00:35 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Guitarboy wrote: > Может быть сразу книжку подскажеш, я вообще начинаю с++шник и могу > неразобраться , но могу попытаться . и я не обижаюсь , просто когда эта > тема была в прошлый раз , никто толком на нее не ответил . Книжку - Бьерн строструп, программирование на C++ 3е издание, там большая часть концепций должна быть объяснена. Можно "C++ для чайников" или нечто подобное, но не факт, что оно того стоит. Есть и другие книги (C++ Unleashed), но они часто идут на английском, что может быть проблемой, как я понимаю :) (если с инглишем проблемы, то его лучше выучить). Ничего другого посоветовать не смогу, так как последнюю книгу по C++ читал года полтора-два назад. По-моему, чтение книг надо довешивать нормальной практикой и обильным ковырянием в языке программирования/программах. Потом, здесь на форуме есть раздел "книги" (http://www.sql.ru/forum/actualthread.aspx?tid=194595), где может быть много полезного (в том числе объяснено как искать книги гуглом (http://www.sql.ru/forum/actualthread.aspx?tid=194595&pg=1#1770824)) Просто по любому возникающему вопросу есть смысл чуть-чуть поковыряться самому, сунувшись на www.google.com (предварительно почитав http://www.google.ru/intl/ru/help/operators.html (на русском её нет)) обычно все нужное быстро находиться. Кроме гугла есть смысл заглядывать на ru.wikipedia.org и en.wikipedia.org . Потом, надо пользоваться встроенной в компилятор справкой (в Delphi, Borland C++ Builder, Visual Studio C++ есть мощная справочная система, в которой можно найти информацию по функциям языка и т.д.). Есть смысл заглядывать на msdn.microsoft.com. Ну и вот тут (http://www.ln.ua/~openxs/articles/smart-questions-ru.html) был нормальный (хотя и, возможно, грубоватый) мануал по "задаванию" вопросов. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2007, 01:08 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
GuitarboyПусть простит меня Феникс (т.к это библиотека с его сайта ) Прощаю... Всегда рад помочъ. Изначально "библиотека" (Ух, как громко сказал) разрабатывалась для вывода кирилици в WIN32 приложениях для разных версий компиляторов. Самое простое и оказалось самое стабильное... Пробовал использовать локализацию (фасеты), но так нифига и не вышло. Для разных win32 компиляторов локализация работала по разному... Даже в старой Visual Studio и .NET реализация локализации различалась. Поэтому идея с использованием фасетов отвалилась (хотя использование локализации более удобный и изящный метод. Но для такой тривиальной задачки он просто не срабатывает). ErV. К сожалению Ваш метод не есть гуд. Ведь требуеться больше памяти и с точки зрения надёжности - не катит. (Как бы с бубеном не танцевал, так и не добился стабильности). А по скорости она так же выполняеться. Gluk (Kazan) - я от Вас так и не увидел что либо для решения данной проблемы. Значит ввод таков. Я обновлю printf_rus.h и заново выложу... Всем удачи! http://feniksa.narod.ru/files/pmaker/lib/printf_rus.h ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2007, 23:33 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Феникса респект . Библиотека супер . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2007, 00:33 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Feniksa wrote: > ErV. К сожалению Ваш метод не есть гуд. Ведь требуеться больше памяти и с на128 байт? Это не цифра, даже для MS-DOS с одним мегабайтом оперативки. А у вас имеется один хороший минус - зависимость от кодировки исходников. Константы у вас представлены символьно, если кодировка страниц не в cp1251 все посыпется (ИМХО), если человек это будет с браузера утягивать, исходники могут быть конвертнуты, например в юникод. Если на мою кодировку koi8-r скинуть юникод, от программы ничего не останется. Впрочем, есть и арифметические алгоритмы замены букв, надо просто поискать. > точки зрения надёжности - не катит. (Как бы с бубеном не танцевал, так и > не добился стабильности). Вот тут по-подробней, пожалуйста. Таблицы легко получить, кстати, по такому же принципу Far работает, только он их в реестре хранит. > А по скорости она так же выполняеться. Вы уверены? Я нет. Дизассемблированный код switch/case'а, который я последний раз видел, содержит в себе мини-массив пар, в котором одному элменету case'а сопостовляется один адрес перехода. Так вот, массив перебирается линейно, от начала до конца, при нахождении "правильного" case'а происходит переход по адресу. Т.е. за счет его(массива) укорочения идет увеличение времени поиска. люкап элемента в таблице, как я привел, будет нормальным компилятором, скорее всего (если компилятор умный) соптимизирован в одну команду относительной адресации (вру, в две - там ещё and был) у вас будет как минимум cmp, jmp addr, loopnz/jmpnz (за точность не ручаюсь, давно асмом пользовался). Дельфийский же компилятор вообще case раскладывал ка if then else if then..., что займет, как мне кажется, больше места. Так что не факт, что памяти меньше занимает, и что по скорости одинаково. Далее. Если я правильно помню, то можно было спокойно в любой версии Win перегнать текст из любой одной кодировки в юникод (т.е. wchar_t или WCHAR и т.д.), а оттуда в любую другую кодировку. Медленно, но стабильно и надежно. Потом, были функции управления коносолью под Win32. Вполне возможно, что там кроме изменения её размера было и изменение её шрифта. Есть же SetFileAPIsToAnsi/SetFileAPIsToOem (вроде бы так оно называется). Ведь не из под чистого доса же вы работаете? :) Ну а если из-под чистого доса, то кто вам мешает загрузить в карточку свой собственный шрифт, с "правильной" кодировкой? (хотя вряд ли вы в досе будете разрабатывать в кодировке, отличной от 866) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2007, 01:42 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Ну и потом, неужели так трудно писать программу сразу в нужной кодировке? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2007, 01:45 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Guitarboy ErV Guitarboy wrote: > Вы вообще все молодцы ... , когда я спрашивал никто не знает знает , а > когда выкладываю еще и гоните )))) Обижаться смысла нету, "библиотека" полное г... Posted via ActualForum NNTP Server 1.4 хе , библиотеку можно обозвать поразному , а слабо зделать лучше и сюда выложить ? ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/winprog/winprog/obsolete_windows_programming_elements.htm см. AnsiToOem если обижаешься на ДЕЛЬНУЮ критику, ты не только ЗЕЛЕН, но еще и КЛИНИЧЕСКИ ГЛУП То что ты выложил, не просто ПРИМИТИВНО, оно иллюстрирует ВСЕ моменты на тему КАК НИКОГДА НЕ НАДО ДЕЛАТЬ (скажем перекодировка ЖЕСТКО прошитая в switch, посимвольный вывод В STREAM !!!, название функции не соответствующее действительности и далее и далее ...) если бы ты по крайней мере перекодировал строку в массиве, это было бы по ПРОСТО ЗЕЛЕНО Кто тебе сказал вообще, что я собираюсь ВЫВОДИТЬ перекодированную строку, да еще ПОСИМВОЛЬНО и в STREAM ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2007, 08:27 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Guitarboy ErV А слабо книжку взять, почитать чуть- чуть и самому собрать? Али умеем только обижаться и народ на "слабо" подкалывать? Если не пашет - меняй таблицу перекодировки, у меня Windows нету, системная кодировка koi8-r. По таблицам кодировки ищи гуглом. Может быть сразу книжку подскажеш, я вообще начинаю с++шник и могу неразобраться , но могу попытаться . и я не обижаюсь , просто когда эта тема была в прошлый раз , никто толком на нее не ответил . начать можно с этого в сети валяются ее сканы, но религия не позволяет мне учить тебя пользоваться гуглом. В прошлый раз на тему не ответили поскольку здесь она интереса практически ни для кого не представляет. Коротко говоря это НЕ ПРОБЛЕМА. Странно, что ты до сих пор этого не понял 2 Feniksa Постарайся не обижаться и реагировать на критику конструктивно. Все сказанное было сказано ПО ДЕЛУ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2007, 08:43 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
Я не буду спорить с ErV, так как не хочу начинать религиозные войны ... да и это безсмысленно для такого тривиального случая. Что бы закончить все споры вот что я скажу. Методов достаточно много. Использование case и таблиц преобразования, или locale ... каждый из єтих методов заслуживает на уважение. У каждого есть свои + и - (а у некоторых может и ++). И какой метод использовать - решать Вам. Далее я не буду принмать участие в обсуждении, так как не вижу в этом никакого смысла. P.S. Как все поняли, библиотека шараварная. Если что не нравиться, можете изменить или переписать... Всё в ваших руках. Дерзайте и ВСЕМ удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2007, 13:48 |
|
||
|
С++ Вывод строки в DOS на русском
|
|||
|---|---|---|---|
|
#18+
я остановился на том, что держу строки в юникоде, настраиваю локаль setlocale(LC_CTYPE,".OCP"); и всё работает штатными средствами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2007, 15:39 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34600684&tid=2028254]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
194ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 524ms |

| 0 / 0 |
