|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Добрый день! Начал писать мини-проект: консольное приложение для Windows на C++. Для работы со строками выбрал std::string и std::wstring. Вроде себе ничего такие. Только у меня по ним парочка вопросов... Первое, в W-функциях WinAPI используется что именно - UTF-16 или UCS-2? А как/что хранит/поддерживает std::wstring? А в чём разница? Можно ли их как-то отличать в runtime по факту/содержимому (например хотя бы в отладчике)? Второе, я получил текст из W-функции WinAPI, засунул его в std::wstring, но оказалось что в этом тексте куча символов "\r" и "\n" - как бы их убрать попроще? Причём иногда мне надо их убирать полностью все, а иногда только если они в начале/конце. И ещё консоль как-то криво выводит строки, в которых разные сочетания "\r" и "\n" (с этим я пока не выявил зависимость). Приводить бы их как-то к единому заданному виду, что ли? Как-то можно? Третье, мне нужно сделать тексту внутри std::wstring (самому содержимому) нижний регистр. Нагуглил какой-то способ (std::transform + std::tolower), но он, нормально работая для латиницы, чё-то игнорирует кириллицу... И последнее - как правильно конвертировать std::string <~> std::wstring? Гугл предлагает либо MultiByteToWideChar и что-то аналогичное (но я как-то сильно не уверен в некоторых параметрах), либо пишет что как бы были какие-то методы в самом std:: но они типа упразднены, но вы можете воспользоваться всякими другими библиотеками. Мне бы хотелось обойтись без лишнего, вот подключил я уже std:: этот - он сам свои же типы не может что ли сконтачить? Только через дополнительных посредников и СМС? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 14:52 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace получил текст из W-функции WinAPI, засунул его в std::wstring, но оказалось что в этом тексте куча символов "\r" и "\n" - как бы их убрать попроще? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 15:41 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace И ещё консоль как-то криво выводит строки, в которых разные сочетания "\r" и "\n" (с этим я пока не выявил зависимость) Это спецсимволы для управления курсором в консоли: "\r" - возврат курсора в начало текущей строки, если что-то было в строке, то новое будет писаться поверх старого "\n" - переход в начало следующей строки https://ru.wikipedia.org/wiki/Перевод_строки ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 15:49 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace И ещё консоль как-то криво выводит строки, в которых разные сочетания "\r" и "\n" (с этим я пока не выявил зависимость). Приводить бы их как-то к единому заданному виду, что ли? Как-то можно? Исторически сложилось что переводы строк не стандартизированы. Это может быть Unix-перевод строки (1 символ \n) или DOS/Windows-вариант (\n\r). Поэтому обрабатыай все ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 16:05 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Переводы строк мне хорошо известны. Вопрос был как раз как их обрабатывать , когда они в std::string или std::wstring. PetroNotC Sharp код дай Какой код? Внутри переменной типа std::wstring текст оканчивающийся на "\r\n\r\n\r\n" - как их убрать, допустим, только с конца? И как, если надо из всего текста? ResourceSpace И ещё консоль как-то криво выводит строки, в которых разные сочетания "\r" и "\n" (с этим я пока не выявил зависимость). Всё, выявил. При выводе в консоль нельзя чтоб в строке было одинокое "\r". Хотя тут можно было и так догадаться. :) Однако, оказалось что в идеале должно быть наоборот одинокое "\n". По крайней мере для mode используемом на данный момент. хм... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 17:02 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Какой код? Внутри переменной типа std::wstring текст оканчивающийся на "\r\n\r\n\r\n" - как их убрать, допустим, только с конца? И как, если надо из всего текста? Не кипятись. Послушай старого модератора. В этом форуме иногда 1 строчка кода стоит целого абзаца поясняющего текста. Поэтому когда чел тебя просит - то будь добр, предоставь. Этож не сложно? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 17:29 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpaceВопрос был как раз /как их обрабатывать/, когда они в std::string или std::wstring. Обычно - никак, потому что в строках эти символы сами собой не появляются без (весьма значительных) усилий со стороны программиста. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 18:10 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Обычно - никак Поиск подстроки, замена подстроки, конкатенация, в верхний регистр, в нижний регистр - не, ненада ничего? :) mayton Не кипятись. В функцию передан std::wstring, текст может быть какой угодно, он извне. Надо убрать из текста "\r\n" - в одном случае только в конце, в другом во всём тексте. mayton Этож не сложно? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Ожидаю: C:\Utils>myApp.exe line line line C:\Utils>А получается:C:\Utils>myApp.exe line line line C:\Utils>А по остальным пунктам пока глухо? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 19:41 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace, ну вот твой кейс. Пока строчка еще std - надо из нее отрезать все "spacers" справа (rtrim()) и только потом в конце преобразовать в С-строку. https://stackoverflow.com/questions/25829143/trim-whitespace-from-a-string/25829178 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 19:47 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpaceПоиск подстроки, замена подстроки, конкатенация, в верхний регистр, в нижний регистр - не, ненада ничего? :) Есть. Внезапно, но все эти методы описаны в документации: https://en.cppreference.com/w/cpp/string/basic_string/ Но вот чтобы в строке были '\r' или '\n' - верится с трудом. Пусть даже она и "приходит извне". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 20:01 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Библиотечные функции обычно например, убрать пробелы в конце или начале. У тебя Нетипичные спец символы. Вполне можешь в цикле посимвольно их убрать. И действительно разберись, почему тебе приходит на вход мусорная свалка. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 20:44 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Попытаюсь пованговать: он вывод какого-то консольного приложения перехватывает и хочет анализировать, но не понимает как это сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 20:49 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dima TПопытаюсь пованговатьь: он вывод какого-то консольного приложения перехватывает Не, это слишком сложно. Ставлю на то, что он эти классы использует как буфер. Типа: Код: sql 1.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 21:07 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dima T Попытаюсь пованговать: он вывод какого-то консольного приложения перехватывает и хочет анализировать, но не понимает как это сделать. Дык этож для Перл задачка! А где этот Прохоров-Милторг? Он щас тут быстро всё порешает одной регуляркой. Офигеете как это жутко красиво будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 21:48 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dima T Попытаюсь пованговать: он вывод какого-то консольного приложения перехватывает и хочет анализировать, но не понимает как это сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 23:00 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Приводить бы их как-то к единому заданному виду, что ли? Как-то можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 06:00 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace в W-функциях WinAPI используется что именно - UTF-16 или UCS-2? UTF-16 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 09:55 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
mayton , спасибо за ссылку, любопытно. Но неужели надо вот так вот по-всякому изворачиваться для стандартной операции над строкой? И функции ltrim() / rtrim() у меня не компилится, не понимает "<>" для "std::isspace". Надо что-то подключить? Первый раз в жизни вижу ошибку компиляции вида "X не требуется" , смешно. :) Dimitry Sibiryakov , Dima T , нет, программист никогда не писавший на С/С++ создал проект в VS и обнаружил что в С++ нет нормального встроенного типа данных "строка". Зато есть просто куча разных непонятных библиотек, в которых кто во что горазд, и непонятно что и как лучше выбрать вообще. Ну вот взял я std::[w]string - и чего, и как? Dimitry Sibiryakov ... все эти методы описаны в документации: ...
Dimitry Sibiryakov ... чтобы в строке были '\r' или '\n' - верится с трудом ... PetroNotC Sharp У тебя Нетипичные спец символы ... мусорная свалка. PetroNotC Sharp Вполне можешь в цикле посимвольно их убрать. PetroNotC Sharp Библиотечные функции обычно например, убрать пробелы в конце или начале. Остальные пункты всё ещё глухо? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 15:09 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpaceВы чего, какие "нетипичные", какая "свалка" - это же обычные переводы на новую строку, в любом тексте они пачками. При попадании "любого текста" в строку они автоматически исчезают. Так что ты с воображаемыми проблемами борешься. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 15:21 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace это же обычные переводы на новую строку, в любом тексте они пачками. Там где куча спец знаков с которыми надо бороться. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 15:22 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Остальные пункты всё ещё глухо? Проход посимвольно в цикле для std::string тут наверно было. Или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 15:24 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Если так уж трудно работать с <wstring>, то загрузи С-библиотеку <cwchar>. Там куча понятных и простых функций... http://www.cplusplus.com/reference/cwchar ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 15:41 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Dimitry Sibiryakov , Dima T , нет, программист никогда не писавший на С/С++ создал проект в VS и обнаружил что в С++ нет нормального встроенного типа данных "строка". Тут еще много чего нет что везде есть, а еще кое-что совсем не так. Все присутствующие это прекрасно знают и искренне не понимают на которую из граблей ты наступил, а гадать просто устанешь. Ты начинай писать код, приводи пример того что не работает, подскажут. ResourceSpace Зато есть просто куча разных непонятных библиотек, в которых кто во что горазд, и непонятно что и как лучше выбрать вообще. Ну вот взял я std::[w]string - и чего, и как? В С/С++ нет нормальных строк потому что изначально строкой был массив char[], т.е. символы в однобайтовой ASCII кодировке. Потом для удобства сделали класс std::string, по сути это обертка над char[]. Потом появился тип wchar_t двухбайтовый, для UTF-16, соответственно строка в виде массива wchar_t[] и обертка std::wstring. Ну и куча сторонних библиотек. PS WinAPI с буковкой W на конце для wchar_t[], с A для char[], вообще без буквы - выбор задается в свойствах проекта, по умолчанию W ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 15:48 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov , PetroNotC Sharp - уж простите, но какие-то вы просто тролли. "Нетипичные"? "Исчезают"? Объясняю последний раз, и последующие высказывания про переводы строк просто игнорирую. Берём ваши цитаты: Dimitry Sibiryakov Так что ты с воображаемыми проблемами борешься. PetroNotC Sharp Дай ссыль на такой текст как Типичный и Распространенный. Там где куча спец знаков с которыми надо бороться. Если выделить текст любой из ваших цитат и скопировать в буфер обмена - в буфере обмена тоже будут содержаться символы "\r" и "\n". Если вставить текст из буфера обмена в программу "Блокнот" и сохранить в файл - в дочернем окне "Блокнота" с классом EDIT будет установлен текст, содержащий символы "\r" и "\n", и в файле тоже будут символы "\r" и "\n". Для вас это сюрприз..? Dima T , да это я всё знаю, десяток лет WinAPI и COM пользуюсь. Только из языков с нормальными строками. Просто думал что уж за столько лет и столько версий как VS так и самого C++ - можно же уже было сделать нормально? Каждую простейшую стандартную операцию над текстом придётся отдельно гуглить и писать свои реализации? Это же капец, не? Dima T приводи пример того что не работает, подскажут. Ну вот из того что я нагуглил, но работает почему-то частично: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Не понимаю, а словами без кода не было понятно что требуется? А пример trim'ов со stackoverflow по ссылке выше, как я уже писал - просто не компилится, вероятнее всего нужен ещё #include, но я не нашёл какой. Ещё я спрашивал про конвертацию std::string <~> std::wstring - нормально ли будет через MultiByteToWideChar и WideCharToMultiByte, или в самой этой "std::" для этого уже что-то есть? d7i , большое спасибо, посмотрю. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 17:26 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 17:51 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace, Ты тролль? Вопрос был такой - Зачем бороться и удалять символы конца строки? Ты ответил авторВ данном тексте, написанном и отправленным на форум вами - содержатся символы "\r" и "\n". Если выделить текст любой из ваших цитат и скопировать в буфер обмена - в буфере обмена тоже будут содержаться символы "\r" и "\n". Если вставить текст из буфера обмена в программу "Блокнот" и сохранить в файл - в дочернем окне "Блокнота" с классом EDIT будет установлен текст, содержащий символы "\r" и "\n", и в файле тоже будут символы "\r" и "\n". Для вас это сюрприз..? Не врубился что спрашивают в вопросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 17:53 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Что значит "зачем"? Потому что в тексте они есть по факту, а мне нужен текст без них. Абсолютно нормальные символы для многострочного текста. И с чего бы им самим куда-то там "пропадать"? Неужели не достаточно частая задача - сделать тексту Trim()? Да хоть такое для теста взять, предположим вот чужой код: Код: plaintext 1. 2. 3. 4. 5.
Не важно откуда оно там взялось, передали так из другого места. Мой вопрос был - как лишнее убирать внутри моей myFunc(). Cerebrum , спасибо огромное! Пошёл читать... :3 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 18:44 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpaceВ данном тексте, написанном и отправленным на форум /_вами_/ - содержатся символы "\r" и "\n". Если выделить текст любой из ваших цитат и скопировать в буфер обмена - в буфере обмена тоже будут содержаться символы "\r" и "\n". Если вставить текст из буфера обмена в программу "Блокнот" и сохранить в файл - в дочернем окне "Блокнота" с классом EDIT будет установлен текст, содержащий символы "\r" и "\n", и в файле тоже будут символы "\r" и "\n". Для вас это сюрприз..? Лично для меня сюрприз, что ты в этом списке нигде не упомянул std::string. Неужели таки дошло, что оно с "данным текстом" никак не соотносится?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 18:48 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Я могу на любом из перечисленных этапов получать текст - хоть из сети, хоть из буфера обмена, хоть из окна, хоть из файла - и хранить в переменной типа std::wstring. С чего бы "\r" и "\n" куда-то при этом пропадали? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 18:53 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpaceС чего бы "\r" и "\n" куда-то при этом пропадали? Обычно они пропадают "с процесса получения текста". Ты не поверишь, но std::string это тип для хранения СТРОКИ . Одной строки. И все вменяемые функции кладут в переменные данного типа ОДНУ строку. Но, конечно, ты волен писать собственные функции любой степени невменяемости. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:00 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Как же по вашему хранится многострочный текст? Вы не в курсе что в WinAPI многострочный текст это один единый массив символов? И во всех нормальных языках тоже? https://en.cppreference.com/w/cpp/string/basic_string The class template basic_string stores and manipulates sequences of char -like objectsВ вашей же справке написано - не для "одной строки", а для "последовательности символов". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:08 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Не важно откуда оно там взялось, передали так из другого места. Ну, во первых, профи программист а не тупой кодировщик всегда смотрит на ранг выше и ниже задачу. Во вторых, мы народ любознательный, и нам просто интересно. Какой идиот дает тебе на вход 20 Enter. Справедливо? ... Ну и если ты трижды повторишь: "так надо!" - от тебя отстанут. Мало ли чудаков на свете. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:13 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpaceКак же по вашему хранится многострочный текст? Так, как требует того задача. От потока байт до массива строк. ResourceSpaceВы не в курсе что в WinAPI многострочный текст это один единый массив символов? Я в курсе, что в WinAPI вообще нет понятия "текст", а только тот самый "массив символов". А ты понимаешь, что WinAPI это НЕ С++? ResourceSpaceИ во всех нормальных языках тоже? Потребовать что ли от модератора тебя забанить за такое наглое размахивание чужим уставом?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:19 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Кстати, по мотивам. Есть в МосЭнерго личный кабинет. И там есть окошко для обращения граждан. Дак вот, при вводе конечно стараешься формулировать мысль))), оформлять абзацы. А при сохранении получаем сплошняком текст без концов строк. Хорошо пробелы оставили))). Уж не знаю. Может место экономят. Мож экран. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:25 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Я выдумал и привёл аж четыре реальных примера откуда оно могло взяться - этого недостаточно? Особенно учитывая что к непосредственно вопросу это не имело отношения. Ладно, выдумал пятый пример - прочитать текст из реестра. Технически там нет явных запретов/ограничений на многострочный REG_SZ. Моя задача и требует - идентично WinAPI. Хорошо, хорошо... "И в любых языках в которых есть встроенный тип данных строка " - лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:28 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Я выдумал ResourceSpace реальных примера Как у тебя с логикой? Выдумал или реальных? Я вот выше не выдуманный пример привел. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:32 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace выдумал пятый пример В реестре каждый знак значимый. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:36 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Я сказал прочитать из реестра, а не перезаписывать в нём. Прочитали текущее текстовое содержимое из буфера обмена. Там какой-то текст и после него 20 Enter. Кто-то может специально или случайно скопировать в буфер 20 Enter? Может. Да, вполне себе реальный пример. Теперь надо убрать нафик 20 Enter и перевести в нижний регистр. И поискать какую-нибудь подстроку. Тож самое из реестра. Из файла. Из стрима. Источник не важен - мы его не контролируем. Надо было наверное на каждый мини-вопрос отдельную тему создавать, а то в один вцепились, другие вообще не заметили... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:44 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpaceЯ выдумал и привёл аж четыре реальных примера откуда оно могло взяться - этого недостаточно? Что "оно"? Ты привёл примеры откуда мог взяться массив символов. std::string оттуда взяться никак не мог. ResourceSpaceЛадно, выдумал пятый пример - прочитать текст из реестра. Технически там нет явных запретов/ограничений на многострочный REG_SZ. Технически нет в природе функций, позволяющих получить из реестра std::string. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:45 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
PetroNotC Sharp,>не понимает "<>" Поясни, о чем речь? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:48 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Весь сыр-бор разгорелся из-того, что ТС по-сути талдычит о буфере, который он пытается уложить в строковый тип... И ясно, что разные функции обработки строк тут не канают. А по-моему нужно взять буфер из TCHAR и тогда всё станет более-менее ясно. Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:49 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Я пишу: PetroNotC Sharp а зачем там то удалять?[спецсимволы предварительно вычитав оттуда] ТС отвечает: ResourceSpace Я сказал прочитать из реестра, а не перезаписывать в нём. ))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:53 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Кто-то может специально или случайно скопировать в буфер 20 Enter? Может. "Может обезьяна тупо стуча по печатной машинке набить Войну и мир? Может! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 19:56 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ъъъъъ PetroNotC Sharp,>не понимает "<>" Поясни, о чем речь? ТС почему то борется если ему пришло 20 Enter. А если пришло 20 тире то не борется. Правильно ли это? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 20:01 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpaceПрочитали текущее текстовое содержимое из буфера обмена. Там какой-то текст и после него 20 Enter. Кто-то может специально или случайно скопировать в буфер 20 Enter? Может. Может, но у тебя ошибка уже в первом посыле "прочитали". В С++ нет функций для работы с буфером обмена, прочитать его невозможно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 20:04 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Ну вот из того что я нагуглил, но работает почему-то частично: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Не понимаю, а словами без кода не было понятно что требуется? Не было понятно. Лично я для такой хери С++ не использую, т.к. знаю что он это не умеет, есть высокоуровневые языки где все это из коробки. Давай отдельный топик поднимем про то как сделать мультиязычный tolower, это отдельная сложная задача если поставить ее кросплатформно! ResourceSpace Ещё я спрашивал про конвертацию std::string <~> std::wstring - нормально ли будет через MultiByteToWideChar и WideCharToMultiByte, или в самой этой "std::" для этого уже что-то есть? Только MultiByteToWideChar и WideCharToMultiByte если в виндавсе, а в "std::" этого вообще нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 20:15 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Что значит "зачем"? Потому что в тексте они есть по факту, а мне нужен текст без них. Абсолютно нормальные символы для многострочного текста. И с чего бы им самим куда-то там "пропадать"? Неужели не достаточно частая задача - сделать тексту Trim()? Да хоть такое для теста взять, предположим вот чужой код: Код: plaintext 1. 2. 3. 4. 5.
Не важно откуда оно там взялось, передали так из другого места. Мой вопрос был - как лишнее убирать внутри моей myFunc(). Cerebrum , спасибо огромное! Пошёл читать... :3 А что по твоему лишнее? Ты конкретно покажи как оно без лишнего должно быть. Допустим в итоге так получится Код: plaintext 1.
Это правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 20:21 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Я же в первом сообщении объяснял - приложение для Windows на C++. Plain-WinAPI-код. Компилятор C++ MSVC. Единственный источник каких-либо входящих данных - функции WinAPI. А там - голый wchar_t buf[] - который мне жутко надоел, даже конкатенацию не сделать. Просто заменил хранение как std::wstring. Либо используем промежуточный wchar_t buf[], либо сразу помещаем в std::wstring через buf.c_str() - вполне себе можно получить текст, и из реестра, и откуда угодно. ъъъъъ Поясни, о чем речь? ResourceSpace функции ltrim() / rtrim() у меня не компилится, не понимает "<>" для "std::isspace". Надо что-то подключить? ResourceSpace пример trim'ов со stackoverflow по ссылке выше, как я уже писал - просто не компилится, вероятнее всего нужен ещё #include, но я не нашёл какой. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вот ошибка компиляции:MSVSПредупреждение C4551 в вызове функции отсутствует список аргументов Ошибка C2062 тип "char" не требуетсяЭти пишет на каждый "char>" после "isspace<". При этом во всплывашке " использование имени типа не допускается ". Да 98% что какого-то #include не хватает, как бы выяснить какого именно? Dima T Допустим в итоге так получится Код: plaintext 1.
Это правильно? Код: plaintext 1.
Но желательно до такого вида: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 20:33 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Сомнений нет: ТС - тролль. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 20:39 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
С чего вдруг? Вы просили пояснить проблему - я пояснил. Могу в виде скриншота показать: ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 20:45 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Я же в первом сообщении объяснял - приложение для Windows на C++. Plain-WinAPI-код. Компилятор C++ MSVC. Единственный источник каких-либо входящих данных - функции WinAPI. А там - голый wchar_t buf[] - который мне жутко надоел, даже конкатенацию не сделать. Просто заменил хранение как std::wstring. Тут сложение легко, а выкидывание символов делать замаешься, т.к. нет прямого доступа на запись внутрь std::wstring. Лучше бы оставил голый wchar_t buf[] ResourceSpace Либо используем промежуточный wchar_t buf[], либо сразу помещаем в std::wstring через buf.c_str() - вполне себе можно получить текст, и из реестра, и откуда угодно. ъъъъъ Поясни, о чем речь? ResourceSpace функции ltrim() / rtrim() у меня не компилится, не понимает "<>" для "std::isspace". Надо что-то подключить? ResourceSpace пример trim'ов со stackoverflow по ссылке выше, как я уже писал - просто не компилится, вероятнее всего нужен ещё #include, но я не нашёл какой. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вот ошибка компиляции:MSVSПредупреждение C4551 в вызове функции отсутствует список аргументов Ошибка C2062 тип "char" не требуется Да 98% что какого-то #include не хватает, как бы выяснить какого именно? Если у тебя wchar_t то зачем используешь std::string в параметрах? он только с char работает. Для wchar_t есть std::wstring ResourceSpace Dima T Допустим в итоге так получится Код: plaintext 1.
Это правильно? Код: plaintext 1.
Но желательно до такого вида: Код: plaintext 1.
Завтра дам примеры кода ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 20:48 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ъъъъъ Сомнений нет: ТС - тролль. Никакой он не тролль, просто офигел от тонкостей С/С++ как и все начинающие. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 20:50 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Это просто оригинальный код со stackoverflow. Я его скопировал и сперва сразу поменял под UTF-16 - а оно и не работает. Тогда думаю ну может я что-то не так подправил, испортил, вернул к оригинальному виду - а всё равно не хочет. Насколько я смог понять - оно думает что std::isspace это обычная функция из <ctype.h>, а не шаблон. Возможно такой шаблон где-то в другом месте. Гугл от угловых скобок только путается. Dima T Лучше бы оставил голый wchar_t buf[] Dima T Завтра дам примеры кода ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 21:02 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace, почему С++ надо? Если виндавс и строки, то C# просится, там все есть, все просто, под начинающих заточено. В С++ чтобы осилить эту тему надо стать гуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 21:15 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dima Tа в "std::" этого вообще нет. Есть: https://en.cppreference.com/w/cpp/locale ResourceSpacePlain-WinAPI-код. Компилятор C++ MSVC. Единственный источник каких-либо входящих данных - функции WinAPI. А там - голый wchar_t buf[] - который мне жутко надоел, даже конкатенацию не сделать. А если поискать?.. https://en.cppreference.com/w/c/string/wide/wcscat Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 21:19 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Dima Tа в "std::" этого вообще нет. Есть: https://en.cppreference.com/w/cpp/locale Ты как всегда сумничал, эта ссылка мне непонятна, а TCу тем более. Дай простой пример кода как сделать Код: plaintext 1.
чтобы получилось "check проверка" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 21:29 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Пример в https://en.cppreference.com/w/cpp/locale/tolower недостаточно доходчив?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 22:11 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace, Проблема \r\n (именно в таком порядке) и string/setting ортогональны. В юниксах стояки разделяются \n, одним символом он же LF=10 ДОС сделал "умно" через CR/LF, чтоб текстовые файлы проще печатать на допотопные принтеры, а потом с этим и застряли.. Отсюдамвыросли новые хаки, вроде fopen( , "rt"), чтоб ловчее прятать эти уже никому не нужные CR. Но они так и остались, как в файлах так и в памяти. Windows. Multiline Edit? CR/LF. Ещё в Винде почему-то принято последнюю строку файла заканчивать CR/LF, как вроде там она нужна. Новый проект в винде? Пишите все широкими "W" функциями, Старый проект? Почитайте про SBCS/MBCS, там есть грабли. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2020, 08:04 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Но желательно до такого вида: Код: plaintext 1.
Исходник Код: plaintext 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2020, 08:39 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Ну да, давайте в С++ писать как в С. Зачем вам вообще тогда плюсы? Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2020, 13:38 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Ну да, давайте в С++ писать как в С. Зачем вам вообще тогда плюсы? Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Не умничай а дай вариант для плюсов и для не плюсов. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2020, 16:41 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
PetroNotC Sharpдай вариант Вариант чего? Бессмысленного кода, годящегося только для лабы на первом курсе?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2020, 17:16 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
На самом деле это проблема. И проблема в системной необученности. Какой-то ВУЗ или преподаватель продолжает штамповать на выходе "C" - шников. Далее эти сишники приходят в С++ и привносят туда свой чудесный опыт. Далее - в нашем форуме появляется Несколько глупых вопросов.... Я как всегда считаю что автор нивчем неуиновный. А виновна система. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2020, 17:25 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
maytonА виновна система. Валить вину на кого-то другого это так по-детски... "Я не виноват, ваза сама со стола спрыгнула!" Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2020, 17:29 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Ну да, давайте в С++ писать как в С. Зачем вам вообще тогда плюсы? Мну оно вообще незачем, я много раз говорил что я в плюсах разбираюсь как свинья в апельсинах, я С знаю и классы немного, я тупо молчал с начала топика, до тех пор пока вместо того чтобы помочь ТСа стали закидывать тухлыми помидорами. Я дал ему решение его проблемы, кто хочет дать решение лучше - дайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2020, 19:02 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ого! Пожалуй даже красиво. Спасибо огромное, пригодится. Но неужели все самые обычные операции так вот "вручную" придётся? И кстати я нашёл в каком инклуде было "std::isspace<>" нужное для ltrim() / rtrim()... Но его подключение почему-то портит "std::transform" из "toLower()" (на первой странице темы было)... Но ладно, фиг с ним... Нормальных методов trim() / lower() / upper() в std этом что-то не наблюдается, наверное просто плюну и возьму API типа CharLowerW()... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 12:10 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace обычные операции Обычные в дельфи и пыхе ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 12:21 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Dima T Допустим в итоге так получится Код: plaintext 1.
Это правильно? Код: plaintext 1.
Но желательно до такого вида: Код: plaintext 1.
как минимум, регекспом можно рубануть ещё есть wstring.find() .rfind() .substr() .replace() .erase() и прочие а потом ещё есть 100+ ф-й в STL ребята третью страницу не могут понять, зачем рубать спец.символы надо было спрашивать проще: как убрать 'a' из строки "ajfieo vaf na afj rga"? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 17:10 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov maytonА виновна система. Валить вину на кого-то другого это так по-детски... "Я не виноват, ваза сама со стола спрыгнула!" Виноват один датский козёл, которому надо было выпить "капель датского короля" еще в 20м веке или создать нормальный язык программирования с семантикой internal string type в сам language. И сегодня велосипедят всякие там STD::, CString, TString e.t.c. просто как следствие этого упущения. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 17:18 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
mayton Виноват один датский козёл, которому надо было выпить "капель датского короля" еще в 20м веке или создать нормальный язык программирования с семантикой internal string type в сам language. И сегодня велосипедят всякие там STD::, CString, TString e.t.c. просто как следствие этого упущения. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 18:21 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Это - фундаментальная часть языка. Основа. Зачем ее переписывать? У тебя-ж не возникает желания переписать integer ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 18:23 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Невозможно встроить в язык все загогулистые особенности обработки строк. Основная проблема в том, что сначала строки были массивом байт, потом решили уйти от байт, но сейчас обратно возвращаются к байтам. А всевозможные API добросовестно отражают все эти годы метаний. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 18:31 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
maytonУ тебя-ж не возникает желания переписать integer ? Довольно сложно переписать процессорный тип. А вот строки в процессоре нет - вольная воля. Как был Си продвинутым ассемблером, так и плюсы его не изменили. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 19:08 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov А вот строки в процессоре нет - вольная воля. ascii таблица не там хранится? пока все не станем англичанами будем грабли собирать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 20:30 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
tip78 Dimitry Sibiryakov А вот строки в процессоре нет - вольная воля. ascii таблица не там хранится? пока все не станем англичанами будем грабли собирать. Давно уже придуман юникод, но ascii древнее, кое-где еще живет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 22:07 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
tip78ascii таблица не там хранится? Ты не поверишь, но там нет даже ascii. Одни битики с байтиками в пачках разного размера. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 23:05 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Отсылка к ASCII-Z строкам полезна только в том случае когда мы дёргаем функции ядра ОС и в этому случае нам уже ну "никак не вырутиться". ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 23:10 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Вот как раз ядра без особых проблем работают с UTF-8. Именно потому, что UTF-8 полностью сохраняет семантику "массив ненулевых байт, завершаемый нулевым (байтом)". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 05:46 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov maytonУ тебя-ж не возникает желания переписать integer ? Довольно сложно переписать процессорный тип. А вот строки в процессоре нет - вольная воля. Как был Си продвинутым ассемблером, так и плюсы его не изменили.Причем процессор? В дельфи, java строка это класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 07:28 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dima T Давно уже придуман юникод, но ascii древнее, кое-где еще живет. в string, как я понимаю, utf8, а в wstring - unicode ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 07:46 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
tip78 Dima T Давно уже придуман юникод, но ascii древнее, кое-где еще живет. в string, как я понимаю, utf8, а в wstring - unicode ? в wstring utf16, они оба юникод UTF - Unicode Transformation Format ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 08:01 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
насчёт конвертации: Код: plaintext 1. 2. 3. 4.
ещё: Код: plaintext 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. 37. 38. 39. 40. 41. 42. 43.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 08:29 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
говорят авторwchar_t следует избегать практически во всех случаях (кроме тех, когда происходит взаимодействие с Windows API). а что будет в мультиязычных проектах, или если в какой-то либе wchar_t ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 08:38 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
tip78 говорят авторwchar_t следует избегать практически во всех случаях (кроме тех, когда происходит взаимодействие с Windows API). а что будет в мультиязычных проектах, или если в какой-то либе wchar_t ? Мультиязычность никак не пострадает если UTF-16 заменить на UTF-8. Одно в другое конвертируется без потерь. Исторически сложилось что MS не как все. WinAPI (и другие продукты MS) используют UTF-16, а ПО и библиотеки других разработчиков в основном UTF-8. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 08:43 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
забыл уточнить - речь исключительно про линух с винды бежать надо подальше. Вот неплохая статья. авторНе так давно озадачился вопросом кроссплатформенной работы со строками в приложениях c++. Задача была, грубо говоря, поставлена как регистронезависимый поиск подстроки в любой кодировке на любой платформе. Итак, первое с чем пришлось понять — что со строками в Линуксе нужно работать в кодировке UTF-8 и в типе std::string, а в Windows строки должны быть в UTF-16LE (тип std::wstring) . Почему? Потому что это by design операционных систем. Хранить строки в std::wstring в Линуксе крайне накладно, поскольку один символ wchar_t занимает 4 байта (в Windows — 2 байта), а работать std::string в Windows нужно было во времена Windows 98. Для работы со строками определяем свой платформонезависимый тип: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 08:49 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dima T Исторически сложилось что MS не как все. WinAPI (и другие продукты MS) используют UTF-16, какое отношение к WINAPI имеет Java и Javascript? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 09:44 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Изопропил Dima T Исторически сложилось что MS не как все. WinAPI (и другие продукты MS) используют UTF-16, какое отношение к WINAPI имеет Java и Javascript? Понятия не имею. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 10:07 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
tip78 забыл уточнить - речь исключительно про линух Если линукс то берем std::string. Если винда и линукс то неизбежно директива компилятору if винда... else... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 10:08 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dima T Исторически сложилось что MS не как все. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 10:11 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Dima T Исторически сложилось что MS не как все. Под капотом все-равно UTF-16 остается. Со времен Win98 (может и W95) WinAPI функция при наличии строк в параметрах имеет две версии FuncA() и FuncW(), соответственно ANSII и WideChar (UTF-16). Как утверждают в книжках в Win98 основной была FuncA(), а FuncW() просто обертка с конвертацией и вызовом FuncA(). Но начиная с Win2000 все стало с точностью до наоборот FuncW() стала основной, а FuncA() оберткой. Не думаю что MS ядро виндовса перепишет на UTF-8, скорее всего если что и будут делать, то ограничатся комплектом оберток. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 10:23 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
PetroNotC SharpВ дельфи, java строка это класс. За Яву не скажу, но в Дельфи строка это обёртка для массива байт. В очень старых дельфях это был массив байт с длиной в нулевом элементе. В умеренно старых дельфях это был указатель на null-terminated массив с дополнительными полями длины и счётчика ссылок по отрицательным смещениям. В современных дельфях это простой указатель на null-terminated массив UTF-16. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 13:33 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov PetroNotC SharpВ дельфи, java строка это класс. За Яву не скажу, но в Дельфи строка это обёртка для массива байт. Главное что снаружи удобный класс. А внутри прячем что угодно авторСимволы со значениями, которые находятся за пределами 16-битного диапазона и в диапазоне от 0x10000 до 0x10FFFF, называются дополнительными символами и определяются как пара charзначений. https://stackoverflow.com/questions/31206851/how-much-memory-does-a-string-use-in-java-8 https://docs.oracle.com/javase/tutorial/i18n/text/unicode.html ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 13:48 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ResourceSpace Каждую простейшую стандартную операцию над текстом придётся отдельно гуглить и писать свои реализации? Это же капец, не? Весёлая тема. Посмеялся с твоих коментов. Да, это капец, но мы так живём. Можешь посмотреть библиотеку Boost String Algorithms . ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 12:16 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Модератор: Так. Никого мы обсуждать не будем. Не личности и не образование. И коверкать не надо. Это - прописано в правилах форума. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 19:33 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
PetroNotC Sharp tip78 забыл уточнить - речь исключительно про линух Если линукс то берем std::string. Если винда и линукс то неизбежно директива компилятору if винда... else... wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет (но это опять же на линухе тестировалось) значит все виндузятники обречены быть медленнее линуха ещё и из-за строк? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 19:53 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Чтоб виндузятники уж точно-точно были оберчены - нужен некий показательный бенчмарк со строками. А с бенчмарками есть проблема. Их - сложно обосновать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 20:01 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
tip78 PetroNotC Sharp пропущено... ну а тогда в чем вопрос? Если линукс то берем std::string. Если винда и линукс то неизбежно директива компилятору if винда... else... wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет (но это опять же на линухе тестировалось) значит все виндузятники обречены быть медленнее линуха ещё и из-за строк? Это что ещё за бред? Откуда такие выводы про работу с памятью? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 20:04 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
tip78wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет А тебя не смущает, что это специализации одного темплейта, то есть код у них абсолютно одинаковый?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 20:08 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
tip78 PetroNotC Sharp пропущено... ну а тогда в чем вопрос? Если линукс то берем std::string. Если винда и линукс то неизбежно директива компилятору if винда... else... wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет (но это опять же на линухе тестировалось) значит все виндузятники обречены быть медленнее линуха ещё и из-за строк? Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32. Так что текстовые процессоры на std::wstring должны обгонять аналоги на std::string. Хотя я тут не уверен, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 20:23 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov tip78wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет А тебя не смущает, что это специализации одного темплейта, то есть код у них абсолютно одинаковый?.. Не специализация. Инстанцирование (явное). Если бы это были специализации, то код у них был бы разный. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 20:33 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
перепутал, сорри это если конкатенацию изменить с "+=" на "+", то посыпятся маллоки а ещё wcout за каждый << добавляет malloc. А cout - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 21:04 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
petrav tip78 пропущено... wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет (но это опять же на линухе тестировалось) значит все виндузятники обречены быть медленнее линуха ещё и из-за строк? Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32. Так что текстовые процессоры на std::wstring должны обгонять аналоги на std::string. Хотя я тут не уверен, конечно. У меня - ощущение дежа-вю. Мне кажется что ты уже поднимал подобные топики. За что будешь топить в этот раз? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 21:17 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
mayton petrav пропущено... Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32. Так что текстовые процессоры на std::wstring должны обгонять аналоги на std::string. Хотя я тут не уверен, конечно. У меня - ощущение дежа-вю. Мне кажется что ты уже поднимал подобные топики. За что будешь топить в этот раз? ?! Я просто ответил на пост юзера tip78. А тебе по теме есть что сказать? Или как обычно? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 21:22 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
petrav Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32. С чего вдруг? Кинуть две лопаты быстрее чем одну, а четыре быстрее чем две. Вечный двигатель? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 21:37 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dima T petrav Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32. С чего вдруг? Кинуть две лопаты быстрее чем одну, а четыре быстрее чем две. Вечный двигатель? Если речь идёт о копировании строк, то конечно utf-8 лидер. Если речь идёт о манипулировании строками, то по сути utf-8 — это лёгкая форма архиватора zip. Даже просто пронавигировать по всем символам utf-8 — это анализ каждого байта. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 21:42 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dima T petrav Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32. С чего вдруг? Кинуть две лопаты быстрее чем одну, а четыре быстрее чем две. Вечный двигатель? +1 [spoiler] Раз-два ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 21:47 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
petrav Я просто ответил на пост юзера tip78 Какой смысл обсуждать вам двоим скорость без прикладного смысла, постановки задачи и ограничений? )) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 22:11 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
petrav mayton пропущено... У меня - ощущение дежа-вю. Мне кажется что ты уже поднимал подобные топики. За что будешь топить в этот раз? ?! Я просто ответил на пост юзера tip78. А тебе по теме есть что сказать? Или как обычно? Ладно извини. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 22:44 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
petrav Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32. По тривиальной причине, которая никак не доходит до любителей "сильно оптимизированных (по)граничных случаев": любая кодировка юникода обязана работать с составными символами и выполнять различные нормализации. Это, мопвашуять, естественные алфавиты со своими исторически сложившимися и нелогичными правилами. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 06:47 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
petrav Даже просто пронавигировать по всем символам utf-8 — это анализ каждого байта. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 06:53 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
ъъъъъ ЗЫ: В utf8 и (иногда) в utf16, при посимвольной обработке требуется отделять один символ от другого, ибо могут попадаться суррогатные пары. В utf32 такого нет. Ну и вообще - матчасть учите. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 06:56 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Первые страницы этого топика оставляют впечатление, что считающие себя корифеями того... слегка в своей корифейности засахарились. В других языках как правило есть стандартный тип строки. Приходящие в С++ из других ЯП сталкиваются с тем, что здесь такого нет. Наверное можно объяснить нормально, почему типа (класса) стандартной строки в С++ нет. Потому что стандартной строки нет. И проще всего это показать на той же самой кириллице, которая в С++ хранится в разных видах, например 3 широко известных. 1. Windows CP-1251. В С++ типы char и string. 1 символ - 1 байт. 2. Windows API UCS-2. В С++ типы wchar_t и wstring. 1 символ - 2 байта. 3. UTF-8. В С++ char и string, но 1 символ может занимать от 1 до 4 байт. В случае с кириллицей в основном 1 или 2 байта. Разное и переменное число байт на символ и обуславливает разные наборы операций в разных типах строк. Программист под каждое сочетание входных, хранимых, и выходных кодировок может выбрать самое эффективное преобразование строк в каждом случае. Ради этой эффективности нет стандартной строки, общей для всех кодировок. В других ЯП, где есть стандартный тип строки, выбран один из возможных вариантов кодирования строк, но при работе с другими кодировками обычно приходится преобразовывать их через стандартный тип, что не столь эффективно, даже если и удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 12:10 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
teo609 что не столь эффективно, даже если и удобно. Удобно, но неэффективно это как?)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 12:21 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
teo609, Проблема в том что вы заботитесь о компе а не о программисте? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 12:22 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
teo609 корифейности засахарились ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 12:26 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
teo609 1. Windows CP-1251. В С++ типы char и string. 1 символ - 1 байт. Это уже обсуждали. Это - 20й век. Это прошло. Современные требования разработки - это ориентация софта во внешний мир. Без курса на изоляционизма. Без обособленности. Подобного рода решения сегодня приводят к неработающим консолям и UI-приложениям и даже (!) сайтам где еще можно встретить cp866 или koi8r. Интерес такое кодирование представляет лишь археологический. А damage котороый привносит однобайтная кодировка в будущем несравненно выше чем какие-то сомнительные экономии которые там находятся. Американский ASCII пускай так и останется однобайтным в нижней части таблицы. Он заслужил право там стоять по историческим причинам и по стандартам де-факто. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 12:53 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
mayton teo609 1. Windows CP-1251. В С++ типы char и string. 1 символ - 1 байт. Это уже обсуждали. Это - 20й век. Это прошло. Современные требования разработки - это ориентация софта во внешний мир. Без курса на изоляционизма. Без обособленности. ... Возможно. Я привел те кодировки, с которыми работаю. В CP-1251 я сохраняю логи на машинах пользователей. Компактнее хранится, легко смотрится, треубется редко. Пока еще реально востребованная кодировка, даже если не в мейнстриме. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 13:50 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
teo609 Компактнее хранится, легко смотрится, треубется редко. А требуется редко это плюс или минус? ... У нас тут прогер решил KOI 8R использовать. Тоже решал наверно в прошлом тысячилетии. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 13:56 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
teo609В других языках как правило есть стандартный тип строки. Приходящие в С++ из других ЯП сталкиваются с тем, что здесь такого нет. Если они не понимаю как строки работают в "других ЯП", то лучше им и не приходить. Потому что фактической разницы нет. От того, что std::string где-то спрятан за compiler magic и RTL, он не становится чем-то другим. teo609В других ЯП, где есть стандартный тип строки, выбран один из возможных вариантов кодирования строк И чем это отличается от "выбранного" std::string? Какой тип строки является "стандартным" в Дельфи? WideString, AnsiString, UTF8String или тупо String, который является алиасом одного из предыдущих в зависимости от версии и опций компилятора?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 14:18 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Какой тип строки является "стандартным" в Дельфи? WideString, AnsiString, UTF8String или тупо String, который является алиасом одного из предыдущих в зависимости от версии и опций компилятора?.. Ну как бы Делфи — это моветон. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 14:23 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
petrav Ну как бы Делфи — это моветон. А вопрос появился потому, что teoXXX несколько, как бы это помягче выразить ... Загоняется, в общем, на ровном месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 14:29 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
petrav Ну как бы Делфи — это моветон. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 14:33 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
petravНу как бы Делфи — это моветон. ....как и любой другой язык в котором есть "стандартные строки". И чо? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 14:34 |
|
Несколько глупых вопросов по std::string и std::wstring
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravНу как бы Делфи — это моветон. ....как и любой другой язык в котором есть "стандартные строки". И чо? Я, например, не вижу практического смысла в таком алиасе: авторКакой тип строки является "стандартным" в Дельфи? WideString, AnsiString, UTF8String или тупо String, который является алиасом одного из предыдущих в зависимости от версии и опций компилятора?.. Зачем оно? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 15:03 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017297]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
3ms |
track hit: |
140ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
119ms |
get tp. blocked users: |
2ms |
others: | 250ms |
total: | 552ms |
0 / 0 |