powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Несколько глупых вопросов по std::string и std::wstring
125 сообщений из 125, показаны все 5 страниц
Несколько глупых вопросов по std::string и std::wstring
    #40016830
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Начал писать мини-проект: консольное приложение для 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:: этот - он сам свои же типы не может что ли сконтачить? Только через дополнительных посредников и СМС?

Спасибо!
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016844
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
получил текст из W-функции WinAPI, засунул его в std::wstring, но оказалось что в этом тексте куча символов "\r" и "\n" - как бы их убрать попроще?
код дай
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016846
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
И ещё консоль как-то криво выводит строки, в которых разные сочетания "\r" и "\n" (с этим я пока не выявил зависимость)

Это спецсимволы для управления курсором в консоли:
"\r" - возврат курсора в начало текущей строки, если что-то было в строке, то новое будет писаться поверх старого
"\n" - переход в начало следующей строки

https://ru.wikipedia.org/wiki/Перевод_строки
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016857
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace

И ещё консоль как-то криво выводит строки, в которых разные сочетания "\r" и "\n" (с этим я пока не выявил зависимость). Приводить бы их как-то к единому заданному виду, что ли? Как-то можно?

Исторически сложилось что переводы строк не стандартизированы. Это может быть Unix-перевод строки (1 символ \n)
или DOS/Windows-вариант (\n\r).

Поэтому обрабатыай все ситуации.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016879
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переводы строк мне хорошо известны. Вопрос был как раз как их обрабатывать , когда они в std::string или std::wstring.

PetroNotC Sharp
код дай

Какой код? Внутри переменной типа std::wstring текст оканчивающийся на "\r\n\r\n\r\n" - как их убрать, допустим, только с конца? И как, если надо из всего текста?

ResourceSpace
И ещё консоль как-то криво выводит строки, в которых разные сочетания "\r" и "\n" (с этим я пока не выявил зависимость).

Всё, выявил. При выводе в консоль нельзя чтоб в строке было одинокое "\r". Хотя тут можно было и так догадаться. :)
Однако, оказалось что в идеале должно быть наоборот одинокое "\n". По крайней мере для mode используемом на данный момент. хм...
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016891
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace

Какой код? Внутри переменной типа std::wstring текст оканчивающийся на "\r\n\r\n\r\n" - как их убрать, допустим, только с конца? И как, если надо из всего текста?

Не кипятись. Послушай старого модератора.
В этом форуме иногда 1 строчка кода стоит целого абзаца поясняющего текста.
Поэтому когда чел тебя просит - то будь добр, предоставь.

Этож не сложно?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016916
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpaceВопрос был как раз /как их обрабатывать/, когда они в std::string или std::wstring.

Обычно - никак, потому что в строках эти символы сами собой не появляются без (весьма
значительных) усилий со стороны программиста.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016940
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Обычно - никак
Как никак? std:: вообще не поддерживает работу со своим содержимым?
Поиск подстроки, замена подстроки, конкатенация, в верхний регистр, в нижний регистр - не, ненада ничего? :)
mayton
Не кипятись.
Никто не кипятился. :) Просто поясняю - вопрос задан относительно работы с типом данных, в общем случае, а не какой-то узкой ситуации, теоретический вопрос.
В функцию передан std::wstring, текст может быть какой угодно, он извне. Надо убрать из текста "\r\n" - в одном случае только в конце, в другом во всём тексте.
mayton
Этож не сложно?
Ну вот вам такое:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void tripleOut(const std::wstring& str) {
	wprintf(L"%ls\n%ls\n%ls", str.c_str(), str.c_str(), str.c_str());
}

void myFunc(const std::wstring& str) {
	// str приходит извне, от меня её содержимое не зависит никак;
	// а содержимое str может оканчиваться на \r\n или на \r\n\r\n или на \r\n\r\n\r\n - надо их все убрать;
	// чисто для примера:
	tripleOut(str);
}

Ожидаю:
C:\Utils>myApp.exe
line
line
line
C:\Utils>А получается:C:\Utils>myApp.exe
line



line



line



C:\Utils>А по остальным пунктам пока глухо?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016943
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace, ну вот твой кейс. Пока строчка еще std - надо из нее отрезать все "spacers" справа (rtrim())
и только потом в конце преобразовать в С-строку.

https://stackoverflow.com/questions/25829143/trim-whitespace-from-a-string/25829178
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016945
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpaceПоиск подстроки, замена подстроки, конкатенация, в верхний регистр, в нижний регистр - не,
ненада ничего? :)

Есть. Внезапно, но все эти методы описаны в документации:
https://en.cppreference.com/w/cpp/string/basic_string/

Но вот чтобы в строке были '\r' или '\n' - верится с трудом. Пусть даже она и "приходит
извне".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016955
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Библиотечные функции обычно например, убрать пробелы в конце или начале.
У тебя Нетипичные спец символы.
Вполне можешь в цикле посимвольно их убрать.
И действительно разберись, почему тебе приходит на вход мусорная свалка.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016956
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попытаюсь пованговать: он вывод какого-то консольного приложения перехватывает и хочет анализировать, но не понимает как это сделать.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016959
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПопытаюсь пованговатьь: он вывод какого-то консольного приложения перехватывает

Не, это слишком сложно. Ставлю на то, что он эти классы использует как буфер. Типа:
Код: sql
1.
read(f, 100, string.begin());


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016963
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Попытаюсь пованговать: он вывод какого-то консольного приложения перехватывает и хочет анализировать, но не понимает как это сделать.

Дык этож для Перл задачка! А где этот Прохоров-Милторг? Он щас тут быстро всё порешает одной регуляркой.

Офигеете как это жутко красиво будет.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40016980
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Попытаюсь пованговать: он вывод какого-то консольного приложения перехватывает и хочет анализировать, но не понимает как это сделать.
одно то что он это скрывает, уже характеризует его характер))))
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017011
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
Приводить бы их как-то к единому заданному виду, что ли? Как-то можно?
std::endl?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017034
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
в W-функциях WinAPI используется что именно - UTF-16 или UCS-2?

UTF-16
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017188
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton , спасибо за ссылку, любопытно. Но неужели надо вот так вот по-всякому изворачиваться для стандартной операции над строкой?
И функции ltrim() / rtrim() у меня не компилится, не понимает "<>" для "std::isspace". Надо что-то подключить?
Первый раз в жизни вижу ошибку компиляции вида "X не требуется" , смешно. :)

Dimitry Sibiryakov , Dima T , нет, программист никогда не писавший на С/С++ создал проект в VS и обнаружил что в С++ нет нормального встроенного типа данных "строка".
Зато есть просто куча разных непонятных библиотек, в которых кто во что горазд, и непонятно что и как лучше выбрать вообще. Ну вот взял я std::[w]string - и чего, и как?
Dimitry Sibiryakov
... все эти методы описаны в документации: ...
По вашей ссылке:
  • конкатенация - есть, работает, даже через просто операцию "+", отлично;
  • поиск подстроки - вроде есть, a sort of (в каком-то виде);
  • замена подстроки - якобы есть, но если вчитаться - оно как-то через попу, нормальном виде нема?
  • в верхний регистр - не вижу;
  • в нижний регистр - не вижу;
  • trim / trim-left / trim-right - не вижу;
А некоторые методы типа starts_with() и ends_with() помечены как "C++20". А у меня вроде максимум "11" можно. Как вы вообще работаете со строками все эти года? %))
Dimitry Sibiryakov
... чтобы в строке были '\r' или '\n' - верится с трудом ...
PetroNotC Sharp
У тебя Нетипичные спец символы ... мусорная свалка.
Вы чего, какие "нетипичные", какая "свалка" - это же обычные переводы на новую строку, в любом тексте они пачками.
PetroNotC Sharp
Вполне можешь в цикле посимвольно их убрать.
Был бы обычный массив - легко бы убрал давно. А вот как это сделать - когда оно в std::string / std::wstring?
PetroNotC Sharp
Библиотечные функции обычно например, убрать пробелы в конце или начале.
Как называется эта "библиотечная функция убрать пробелы в конце или начале" и в каком заголовке/инклюде она находится?

Остальные пункты всё ещё глухо?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017194
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpaceВы чего, какие "нетипичные", какая "свалка" - это же обычные переводы на новую строку, в
любом тексте они пачками.

При попадании "любого текста" в строку они автоматически исчезают. Так что ты с
воображаемыми проблемами борешься.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017195
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
это же обычные переводы на новую строку, в любом тексте они пачками.
гугл перед носом? Дай ссыль на такой текст как Типичный и Распространенный.
Там где куча спец знаков с которыми надо бороться.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017197
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
Остальные пункты всё ещё глухо?
повтори какие.
Проход посимвольно в цикле для std::string тут наверно было. Или нет?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017208
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если так уж трудно работать с <wstring>, то загрузи С-библиотеку <cwchar>.
Там куча понятных и простых функций...
http://www.cplusplus.com/reference/cwchar
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017213
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017278
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov , PetroNotC Sharp - уж простите, но какие-то вы просто тролли. "Нетипичные"? "Исчезают"?
Объясняю последний раз, и последующие высказывания про переводы строк просто игнорирую. Берём ваши цитаты:
Dimitry Sibiryakov
Так что ты с
воображаемыми проблемами борешься.
PetroNotC Sharp
Дай ссыль на такой текст как Типичный и Распространенный.
Там где куча спец знаков с которыми надо бороться.
В данном тексте, написанном и отправленным на форум вами - содержатся символы "\r" и "\n".
Если выделить текст любой из ваших цитат и скопировать в буфер обмена - в буфере обмена тоже будут содержаться символы "\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.
void toLower(std::wstring& str) { // req: <algorithm>
	std::transform(str.begin(), str.end(), str.begin(), std::tolower);
}

void myFunc(std::wstring& str) {
	// str приходит извне, от меня её содержимое не зависит никак;
	wprintf(L"%ls\n", str.c_str()); // допустим, выведет такое: CHEck ПРОверка
	toLower(str);
	wprintf(L"%ls\n", str.c_str()); // тогда тут выведет уже: check ПРОверка
	// и чего оно кириллицу не тронуло, а? надо чтоб было: check проверка
	// при этом - украинский, немецкий и греческий - тоже вполне может быть в тексте
}

Не понимаю, а словами без кода не было понятно что требуется?
А пример trim'ов со stackoverflow по ссылке выше, как я уже писал - просто не компилится, вероятнее всего нужен ещё #include, но я не нашёл какой.
Ещё я спрашивал про конвертацию std::string <~> std::wstring - нормально ли будет через MultiByteToWideChar и WideCharToMultiByte, или в самой этой "std::" для этого уже что-то есть?

d7i , большое спасибо, посмотрю.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017295
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017296
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace,
Ты тролль?
Вопрос был такой - Зачем бороться и удалять символы конца строки?
Ты ответил
авторВ данном тексте, написанном и отправленным на форум вами - содержатся символы "\r" и "\n".
Если выделить текст любой из ваших цитат и скопировать в буфер обмена - в буфере обмена тоже будут содержаться символы "\r" и "\n".
Если вставить текст из буфера обмена в программу "Блокнот" и сохранить в файл - в дочернем окне "Блокнота" с классом EDIT будет установлен текст, содержащий символы "\r" и "\n", и в файле тоже будут символы "\r" и "\n".
Для вас это сюрприз..?
Не врубился что спрашивают в вопросе?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017319
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что значит "зачем"? Потому что в тексте они есть по факту, а мне нужен текст без них.
Абсолютно нормальные символы для многострочного текста. И с чего бы им самим куда-то там "пропадать"?
Неужели не достаточно частая задача - сделать тексту Trim()?

Да хоть такое для теста взять, предположим вот чужой код:
Код: plaintext
1.
2.
3.
4.
5.
int wmain(int argc, wchar_t* argv[]) {
	std::wstring str = L"Однажды\r\nВ студёную зимнюю пору,\r\nЯ из лесу вышел,\r\nБыл сильный мороз...  \t   \r\n   \r\n   \r\n   \r\n";
	myFunc(str);
	return 0;
}

Не важно откуда оно там взялось, передали так из другого места. Мой вопрос был - как лишнее убирать внутри моей myFunc().


Cerebrum , спасибо огромное! Пошёл читать... :3
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017321
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpaceВ данном тексте, написанном и отправленным на форум /_вами_/ - содержатся символы "\r" и "\n".
Если выделить текст любой из ваших цитат и скопировать в буфер обмена - в буфере обмена
тоже будут содержаться символы "\r" и "\n".
Если вставить текст из буфера обмена в программу "Блокнот" и сохранить в файл - в дочернем
окне "Блокнота" с классом EDIT будет установлен текст, содержащий символы "\r" и "\n", и в
файле тоже будут символы "\r" и "\n".
Для вас это сюрприз..?

Лично для меня сюрприз, что ты в этом списке нигде не упомянул std::string. Неужели таки
дошло, что оно с "данным текстом" никак не соотносится?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017322
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я могу на любом из перечисленных этапов получать текст - хоть из сети, хоть из буфера обмена, хоть из окна, хоть из файла - и хранить в переменной типа std::wstring.
С чего бы "\r" и "\n" куда-то при этом пропадали?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017326
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpaceС чего бы "\r" и "\n" куда-то при этом пропадали?

Обычно они пропадают "с процесса получения текста". Ты не поверишь, но std::string это тип
для хранения СТРОКИ . Одной строки. И все вменяемые функции кладут в переменные
данного типа ОДНУ строку.

Но, конечно, ты волен писать собственные функции любой степени невменяемости.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017330
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как же по вашему хранится многострочный текст? Вы не в курсе что в WinAPI многострочный текст это один единый массив символов? И во всех нормальных языках тоже?
https://en.cppreference.com/w/cpp/string/basic_string The class template basic_string stores and manipulates sequences of char -like objectsВ вашей же справке написано - не для "одной строки", а для "последовательности символов".
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017331
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
Не важно откуда оно там взялось, передали так из другого места.

Ну, во первых, профи программист а не тупой кодировщик всегда смотрит на ранг выше и ниже задачу.
Во вторых, мы народ любознательный, и нам просто интересно. Какой идиот дает тебе на вход 20 Enter.
Справедливо?
...
Ну и если ты трижды повторишь: "так надо!" - от тебя отстанут.
Мало ли чудаков на свете.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017333
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpaceКак же по вашему хранится многострочный текст?

Так, как требует того задача. От потока байт до массива строк.

ResourceSpaceВы не в курсе что в WinAPI многострочный текст это один единый массив символов?

Я в курсе, что в WinAPI вообще нет понятия "текст", а только тот самый "массив символов".
А ты понимаешь, что WinAPI это НЕ С++?

ResourceSpaceИ во всех нормальных языках тоже?

Потребовать что ли от модератора тебя забанить за такое наглое размахивание чужим уставом?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017335
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, по мотивам.
Есть в МосЭнерго личный кабинет. И там есть окошко для обращения граждан.
Дак вот, при вводе конечно стараешься формулировать мысль))), оформлять абзацы.
А при сохранении получаем сплошняком текст без концов строк.
Хорошо пробелы оставили))).
Уж не знаю. Может место экономят. Мож экран.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017337
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я выдумал и привёл аж четыре реальных примера откуда оно могло взяться - этого недостаточно? Особенно учитывая что к непосредственно вопросу это не имело отношения.
Ладно, выдумал пятый пример - прочитать текст из реестра. Технически там нет явных запретов/ограничений на многострочный REG_SZ.



Моя задача и требует - идентично WinAPI.

Хорошо, хорошо... "И в любых языках в которых есть встроенный тип данных строка " - лучше?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017339
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
Я выдумал

ResourceSpace
реальных примера
))))) LOL
Как у тебя с логикой?
Выдумал или реальных?
Я вот выше не выдуманный пример привел.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017341
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
выдумал пятый пример
а зачем там то удалять?
В реестре каждый знак значимый.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017343
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сказал прочитать из реестра, а не перезаписывать в нём.

Прочитали текущее текстовое содержимое из буфера обмена. Там какой-то текст и после него 20 Enter. Кто-то может специально или случайно скопировать в буфер 20 Enter? Может.
Да, вполне себе реальный пример. Теперь надо убрать нафик 20 Enter и перевести в нижний регистр. И поискать какую-нибудь подстроку.
Тож самое из реестра. Из файла. Из стрима. Источник не важен - мы его не контролируем.

Надо было наверное на каждый мини-вопрос отдельную тему создавать, а то в один вцепились, другие вообще не заметили...
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017345
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpaceЯ выдумал и привёл аж четыре реальных примера откуда оно могло взяться - этого недостаточно?

Что "оно"? Ты привёл примеры откуда мог взяться массив символов. std::string оттуда
взяться никак не мог.

ResourceSpaceЛадно, выдумал пятый пример - прочитать текст из реестра. Технически там нет явных
запретов/ограничений на многострочный REG_SZ.

Технически нет в природе функций, позволяющих получить из реестра std::string.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017346
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,>не понимает "<>"
Поясни, о чем речь?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017347
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весь сыр-бор разгорелся из-того, что ТС по-сути талдычит о буфере, который он пытается уложить в строковый тип...
И ясно, что разные функции обработки строк тут не канают.
А по-моему нужно взять буфер из TCHAR и тогда всё станет более-менее ясно.
Код: plaintext
1.
2.
3.
4.
5.
#ifdef _UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017348
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пишу:
PetroNotC Sharp
а зачем там то удалять?[спецсимволы предварительно вычитав оттуда]

ТС отвечает:
ResourceSpace
Я сказал прочитать из реестра, а не перезаписывать в нём.

)))))
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017349
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
Кто-то может специально или случайно скопировать в буфер 20 Enter? Может.
не люблю прогеров ставящих себе дурацкие задачи.
"Может обезьяна тупо стуча по печатной машинке набить Войну и мир? Может!
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017350
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
PetroNotC Sharp,>не понимает "<>"
Поясни, о чем речь?
поясняю.
ТС почему то борется если ему пришло 20 Enter.
А если пришло 20 тире то не борется.
Правильно ли это?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017351
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpaceПрочитали текущее текстовое содержимое из буфера обмена. Там какой-то текст и после него
20 Enter. Кто-то может специально или случайно скопировать в буфер 20 Enter? Может.

Может, но у тебя ошибка уже в первом посыле "прочитали". В С++ нет функций для работы с
буфером обмена, прочитать его невозможно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017352
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
Ну вот из того что я нагуглил, но работает почему-то частично:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void toLower(std::wstring& str) { // req: <algorithm>
	std::transform(str.begin(), str.end(), str.begin(), std::tolower);
}

void myFunc(std::wstring& str) {
	// str приходит извне, от меня её содержимое не зависит никак;
	wprintf(L"%ls\n", str.c_str()); // допустим, выведет такое: CHEck ПРОверка
	toLower(str);
	wprintf(L"%ls\n", str.c_str()); // тогда тут выведет уже: check ПРОверка
	// и чего оно кириллицу не тронуло, а? надо чтоб было: check проверка
	// при этом - украинский, немецкий и греческий - тоже вполне может быть в тексте
}

Не понимаю, а словами без кода не было понятно что требуется?

Не было понятно. Лично я для такой хери С++ не использую, т.к. знаю что он это не умеет, есть высокоуровневые языки где все это из коробки. Давай отдельный топик поднимем про то как сделать мультиязычный tolower, это отдельная сложная задача если поставить ее кросплатформно!
ResourceSpace
Ещё я спрашивал про конвертацию std::string <~> std::wstring - нормально ли будет через MultiByteToWideChar и WideCharToMultiByte, или в самой этой "std::" для этого уже что-то есть?

Только MultiByteToWideChar и WideCharToMultiByte если в виндавсе, а в "std::" этого вообще нет.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017354
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
Что значит "зачем"? Потому что в тексте они есть по факту, а мне нужен текст без них.
Абсолютно нормальные символы для многострочного текста. И с чего бы им самим куда-то там "пропадать"?
Неужели не достаточно частая задача - сделать тексту Trim()?

Да хоть такое для теста взять, предположим вот чужой код:
Код: plaintext
1.
2.
3.
4.
5.
int wmain(int argc, wchar_t* argv[]) {
	std::wstring str = L"Однажды\r\nВ студёную зимнюю пору,\r\nЯ из лесу вышел,\r\nБыл сильный мороз...  \t   \r\n   \r\n   \r\n   \r\n";
	myFunc(str);
	return 0;
}

Не важно откуда оно там взялось, передали так из другого места. Мой вопрос был - как лишнее убирать внутри моей myFunc().


Cerebrum , спасибо огромное! Пошёл читать... :3

А что по твоему лишнее? Ты конкретно покажи как оно без лишнего должно быть. Допустим в итоге так получится
Код: plaintext
1.
L"ОднаждыВ студёную зимнюю пору,Я из лесу вышел,Был сильный мороз...  \t            ";

Это правильно?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017357
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я же в первом сообщении объяснял - приложение для 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, но я не нашёл какой.
Вот тот код со stackoverflow:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
std::string& ltrim(std::string& str) {
	auto it2 = std::find_if(str.begin(), str.end(), [](char ch) { return !std::isspace<char>(ch, std::locale::classic()); });
	str.erase(str.begin(), it2);
	return str;
}

std::string& rtrim(std::string& str) {
	auto it1 = std::find_if(str.rbegin(), str.rend(), [](char ch) { return !std::isspace<char>(ch, std::locale::classic()); });
	str.erase(it1.base(), str.end());
	return str;
}

Вот ошибка компиляции:MSVSПредупреждение C4551 в вызове функции отсутствует список аргументов
Ошибка C2062 тип "char" не требуетсяЭти пишет на каждый "char>" после "isspace<". При этом во всплывашке " использование имени типа не допускается ".
Да 98% что какого-то #include не хватает, как бы выяснить какого именно?


Dima T
Допустим в итоге так получится
Код: plaintext
1.
L"ОднаждыВ студёную зимнюю пору,Я из лесу вышел,Был сильный мороз...  \t            ";

Это правильно?
Такие стандартные штуки как TrimLeft и TrimRight удаляет пробельные символы только с одного края:
Код: plaintext
1.
L"Однажды\r\nВ студёную зимнюю пору,\r\nЯ из лесу вышел,\r\nБыл сильный мороз...";

Но желательно до такого вида:
Код: plaintext
1.
L"однажды\nв студёную зимнюю пору,\nя из лесу вышел,\nбыл сильный мороз...";
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017358
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сомнений нет: ТС - тролль.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017359
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С чего вдруг? Вы просили пояснить проблему - я пояснил.
Могу в виде скриншота показать:
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017360
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, но я не нашёл какой.
Вот тот код со stackoverflow:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
std::string& ltrim(std::string& str) {
	auto it2 = std::find_if(str.begin(), str.end(), [](char ch) { return !std::isspace<char>(ch, std::locale::classic()); });
	str.erase(str.begin(), it2);
	return str;
}

std::string& rtrim(std::string& str) {
	auto it1 = std::find_if(str.rbegin(), str.rend(), [](char ch) { return !std::isspace<char>(ch, std::locale::classic()); });
	str.erase(it1.base(), str.end());
	return str;
}

Вот ошибка компиляции:MSVSПредупреждение C4551 в вызове функции отсутствует список аргументов
Ошибка C2062 тип "char" не требуется
Эти пишет на каждый "char>" после "isspace<". При этом во всплывашке " использование имени типа не допускается ".
Да 98% что какого-то #include не хватает, как бы выяснить какого именно?

Если у тебя wchar_t то зачем используешь std::string в параметрах? он только с char работает. Для wchar_t есть std::wstring

ResourceSpace
Dima T
Допустим в итоге так получится
Код: plaintext
1.
L"ОднаждыВ студёную зимнюю пору,Я из лесу вышел,Был сильный мороз...  \t            ";

Это правильно?
Такие стандартные штуки как TrimLeft и TrimRight удаляет пробельные символы только с одного края:
Код: plaintext
1.
L"Однажды\r\nВ студёную зимнюю пору,\r\nЯ из лесу вышел,\r\nБыл сильный мороз...";

Но желательно до такого вида:
Код: plaintext
1.
L"однажды\nв студёную зимнюю пору,\nя из лесу вышел,\nбыл сильный мороз...";


Завтра дам примеры кода
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017361
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Сомнений нет: ТС - тролль.

Никакой он не тролль, просто офигел от тонкостей С/С++ как и все начинающие.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017364
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это просто оригинальный код со stackoverflow.
Я его скопировал и сперва сразу поменял под UTF-16 - а оно и не работает.
Тогда думаю ну может я что-то не так подправил, испортил, вернул к оригинальному виду - а всё равно не хочет.

Насколько я смог понять - оно думает что std::isspace это обычная функция из <ctype.h>, а не шаблон. Возможно такой шаблон где-то в другом месте. Гугл от угловых скобок только путается.
Dima T
Лучше бы оставил голый wchar_t buf[]
Неудобно же вообще совсем. Так хоть что-то могу с ними делать.
Dima T
Завтра дам примеры кода
Спасибо большое!
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017366
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace, почему С++ надо? Если виндавс и строки, то C# просится, там все есть, все просто, под начинающих заточено. В С++ чтобы осилить эту тему надо стать гуру.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017367
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017369
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Dima Tа в "std::" этого вообще нет.

Есть: https://en.cppreference.com/w/cpp/locale

Ты как всегда сумничал, эта ссылка мне непонятна, а TCу тем более. Дай простой пример кода как сделать
Код: plaintext
1.
tolower(L"CHEck ПРОверка")


чтобы получилось "check проверка"
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017375
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример в https://en.cppreference.com/w/cpp/locale/tolower недостаточно доходчив?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017410
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ResourceSpace,


Проблема \r\n (именно в таком порядке) и string/setting ортогональны.

В юниксах стояки разделяются \n, одним символом он же LF=10

ДОС сделал "умно" через CR/LF, чтоб текстовые файлы проще печатать на допотопные принтеры, а потом с этим и застряли..

Отсюдамвыросли новые хаки, вроде fopen( , "rt"), чтоб ловчее прятать эти уже никому не нужные CR.

Но они так и остались, как в файлах так и в памяти. Windows. Multiline Edit? CR/LF.

Ещё в Винде почему-то принято последнюю строку файла заканчивать CR/LF, как вроде там она нужна.

Новый проект в винде? Пишите все широкими "W" функциями,

Старый проект? Почитайте про SBCS/MBCS, там есть грабли.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017414
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
Но желательно до такого вида:
Код: plaintext
1.
L"однажды\nв студёную зимнюю пору,\nя из лесу вышел,\nбыл сильный мороз...";


Исходник
Код: 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.
static void clean(std::wstring& str) {
	// Убираем несколько \r \n подряд с заменой на один \n
	bool is_write = true;
	std::wstring::iterator p = str.begin();

	for(std::wstring::iterator i = str.begin(); i != str.end(); i++) {
		switch(*i) {
		case L'\r':
			*i = L'\n';

		case L'\n':
			if(is_write) {
				*p = *i;
				p++;
				is_write = false;
			}
			break;

		default:
			*p = *i;
			p++;
			is_write = true;
		}

	}

	// Убраем замыкающие переводы строк, пробелы и табуляции
	for(; p != str.begin(); p--) {
		if(*p != L'\n' && *p != L'\t'&& *p != L' ') {
			p++;
			break;
		}
	}

	// Обрезаем ненужный хвост
	if(p != str.end()) {
		str.resize(p - str.begin());
	}
}

int main() {
	std::wstring str = { L"Однажды\r\nВ студёную зимнюю пору,\r\nЯ из лесу вышел,\r\nБыл сильный мороз...  \t   \r\n   \r\n   \r\n   \r\n" };
	clean(str);
	for(auto& i : str ) printf("%d ", i);
	return 0;
}

...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017501
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да, давайте в С++ писать как в С. Зачем вам вообще тогда плюсы?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
std::wistringstream s(L"однажды\nв студёную зимнюю пору,\nя из лесу вышел,\nбыл 
сильный мороз...");
while (s)
{
   std::wstring c;
   s >> c;
   std::cout << c;
}


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017594
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Ну да, давайте в С++ писать как в С. Зачем вам вообще тогда плюсы?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
std::wistringstream s(L"однажды\nв студёную зимнюю пору,\nя из лесу вышел,\nбыл 
сильный мороз...");
while (s)
{
   std::wstring c;
   s >> c;
   std::cout << c;
}


Не умничай а дай вариант для плюсов и для не плюсов.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017616
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharpдай вариант

Вариант чего? Бессмысленного кода, годящегося только для лабы на первом курсе?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017626
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле это проблема. И проблема в системной необученности. Какой-то ВУЗ или преподаватель
продолжает штамповать на выходе "C" - шников. Далее эти сишники приходят в С++ и привносят туда
свой чудесный опыт. Далее - в нашем форуме появляется Несколько глупых вопросов....

Я как всегда считаю что автор нивчем неуиновный. А виновна система.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017632
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА виновна система.

Валить вину на кого-то другого это так по-детски... "Я не виноват, ваза сама со стола
спрыгнула!"
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017682
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Ну да, давайте в С++ писать как в С. Зачем вам вообще тогда плюсы?

Мну оно вообще незачем, я много раз говорил что я в плюсах разбираюсь как свинья в апельсинах, я С знаю и классы немного, я тупо молчал с начала топика, до тех пор пока вместо того чтобы помочь ТСа стали закидывать тухлыми помидорами. Я дал ему решение его проблемы, кто хочет дать решение лучше - дайте.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017862
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ого! Пожалуй даже красиво. Спасибо огромное, пригодится.
Но неужели все самые обычные операции так вот "вручную" придётся?

И кстати я нашёл в каком инклуде было "std::isspace<>" нужное для ltrim() / rtrim()...
Но его подключение почему-то портит "std::transform" из "toLower()" (на первой странице темы было)... Но ладно, фиг с ним...
Нормальных методов trim() / lower() / upper() в std этом что-то не наблюдается, наверное просто плюну и возьму API типа CharLowerW()...
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40017871
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
обычные операции
у тебя не обычные и кроссплатформенные.
Обычные в дельфи и пыхе
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021790
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
Dima T
Допустим в итоге так получится
Код: plaintext
1.
L"ОднаждыВ студёную зимнюю пору,Я из лесу вышел,Был сильный мороз...  \t            ";


Это правильно?
Такие стандартные штуки как TrimLeft и TrimRight удаляет пробельные символы только с одного края:
Код: plaintext
1.
L"Однажды\r\nВ студёную зимнюю пору,\r\nЯ из лесу вышел,\r\nБыл сильный мороз...";


Но желательно до такого вида:
Код: plaintext
1.
L"однажды\nв студёную зимнюю пору,\nя из лесу вышел,\nбыл сильный мороз...";


как минимум, регекспом можно рубануть
ещё есть wstring.find() .rfind() .substr() .replace() .erase() и прочие
а потом ещё есть 100+ ф-й в STL

ребята третью страницу не могут понять, зачем рубать спец.символы
надо было спрашивать проще: как убрать 'a' из строки "ajfieo vaf na afj rga"?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021794
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

maytonА виновна система.

Валить вину на кого-то другого это так по-детски... "Я не виноват, ваза сама со стола
спрыгнула!"

Виноват один датский козёл, которому надо было выпить "капель датского короля"
еще в 20м веке или создать нормальный язык программирования с семантикой internal
string type в сам language. И сегодня велосипедят всякие там STD::, CString, TString e.t.c.
просто как следствие этого упущения.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021815
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Виноват один датский козёл, которому надо было выпить "капель датского короля"
еще в 20м веке или создать нормальный язык программирования с семантикой internal
string type в сам language. И сегодня велосипедят всякие там STD::, CString, TString e.t.c.
просто как следствие этого упущения.
а по мне так это достоинство, а не недостаток. пойди ка в вижуалбэйсике или жабе напиши свою строку попробуй)
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021816
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это - фундаментальная часть языка. Основа. Зачем ее переписывать? У тебя-ж не возникает
желания переписать integer ?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021818
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Невозможно встроить в язык все загогулистые особенности обработки строк.
Основная проблема в том, что сначала строки были массивом байт, потом решили уйти от байт, но сейчас обратно возвращаются к байтам. А всевозможные API добросовестно отражают все эти годы метаний.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021826
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonУ тебя-ж не возникает желания переписать integer ?

Довольно сложно переписать процессорный тип. А вот строки в процессоре нет - вольная воля.

Как был Си продвинутым ассемблером, так и плюсы его не изменили.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021851
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
А вот строки в процессоре нет - вольная воля.

ascii таблица не там хранится?
пока все не станем англичанами будем грабли собирать.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021865
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78
Dimitry Sibiryakov
А вот строки в процессоре нет - вольная воля.

ascii таблица не там хранится?
пока все не станем англичанами будем грабли собирать.

Давно уже придуман юникод, но ascii древнее, кое-где еще живет.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021881
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78ascii таблица не там хранится?

Ты не поверишь, но там нет даже ascii. Одни битики с байтиками в пачках разного размера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021882
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отсылка к ASCII-Z строкам полезна только в том случае когда мы дёргаем функции ядра ОС
и в этому случае нам уже ну "никак не вырутиться".
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021919
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как раз ядра без особых проблем работают с UTF-8.
Именно потому, что UTF-8 полностью сохраняет семантику "массив ненулевых байт, завершаемый нулевым (байтом)".
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021927
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
maytonУ тебя-ж не возникает желания переписать integer ?

Довольно сложно переписать процессорный тип. А вот строки в процессоре нет - вольная воля.

Как был Си продвинутым ассемблером, так и плюсы его не изменили.Причем процессор? В дельфи, java строка это класс.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021930
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Давно уже придуман юникод, но ascii древнее, кое-где еще живет.

в string, как я понимаю, utf8, а в wstring - unicode ?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021936
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78
Dima T
Давно уже придуман юникод, но ascii древнее, кое-где еще живет.

в string, как я понимаю, utf8, а в wstring - unicode ?

в wstring utf16, они оба юникод

UTF - Unicode Transformation Format
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021938
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насчёт конвертации:
Код: plaintext
1.
2.
3.
4.
// Note that the standard C++ strings have standard conversion functions that are portable:
wstring_convert<codecvt_utf8_utf16<wchar_t>, wchar_t> conversion;
wstring s = conversion.from_bytes(z.c_str());
string mbs = conversion.to_bytes(L"ÆƆ");


ещё:
Код: 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.
// http://scrutator.me/post/2013/12/29/various_literals.aspx
Литералы являются не единственным добавлением относящемся к unicode. Получение строки содержащей кодированный unicode это замечательно, но их ведь надо как-то использовать; что у нас есть для работы с unicode? А есть у нас, прямо скажем, крайне мало:

Новые фасеты для преобразования между добавленными кодировками unicode: std::codecvt_utf8<>, std::codecvt_utf16<> и std::codecvt_utf8_utf16<>
std::wstring_convert – класс для перекодирования строки в одной кодировке в другую; использует вышеупомянутые фасеты.
std::wbuffer_convert – класс для создания потокового буфера, с помощью которого можно осуществлять операции ввода\вывода с автоматическим перекодированием; использует вышеупомянутые фасеты.

// Пример:
using convertor = std::codecvt_utf8_utf16<wchar_t>;
std::string utf16ToUtf8(const std::wstring& utf16)
{
using CStr = std::string;
using CWideStr = std::wstring;
// convert UTF-8 string to wstring
CWideStr utf8_to_wstring(const CStr &str)
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
    return myconv.from_bytes(str);
}

// convert wstring to UTF-8 string
    std::wstring_convert<convertor, wchar_t> convert;
    return convert.to_bytes(utf16.c_str());
}

std::wstring utf8ToUtf16(const std::string& utf8)
{
    std::wstring_convert<convertor, wchar_t> utf16conv;
    return utf16conv.from_bytes(utf8.c_str());
}
// В примере используется wchar_t, т.к. пример из Visual Studio где его размер 2 байта.

// Новые фасеты позволяют выполнить конвертации следующих типов:
UTF-8 &#8596; UCS-2 с использованием codecvt_utf8<char16_t> или codecvt_utf8<wchar_t> если sizeof(wchar_t) == 2;
UTF-8 &#8596; UTF-32 с использованием codecvt_utf8<char32_t> или  codecvt_utf8<wchar_t> если sizeof(wchar_t) == 4;
UTF-16 &#8596; UCS-2 с использованием codecvt_utf16<char16_t> или  codecvt_utf16<wchar_t> если sizeof(wchar_t) == 2;
UTF-16 &#8596; UTF-32 с использованием codecvt_utf16<char32_t> или  codecvt_utf16<wchar_t> если sizeof(wchar_t) == 4;
UTF-8 &#8596; UTF-16 с использованием codecvt_utf8_utf16<char16_t> или  codecvt_utf8_utf16<wchar_t> если sizeof(wchar_t) == 2;
// Список был взят отсюда: http://stackoverflow.com/questions/9476641/with-c11-do-i-still-need-a-non-standard-string-manipulation-library-for-unico

Я думаю, что не буду не прав, если скажу, что в C++ как не было поддержки unicode, так её и нет. Да эти новшества лучше чем ничего, но это никак не отменяет того, что для нормальной.
поддержки unicode в приложении нам всё равно придётся использовать ICU (http://site.icu-project.org/) и ждать, когда комитет соблаговолит добавить полноценную поддержку в язык.
Ведь в современном мире мульти-культурные приложения всегда в выигрыше, в сравнении со своими монокультурными аналогами.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021942
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
говорят
авторwchar_t следует избегать практически во всех случаях (кроме тех, когда происходит взаимодействие с Windows API).
а что будет в мультиязычных проектах, или если в какой-то либе wchar_t ?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021943
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78
говорят
авторwchar_t следует избегать практически во всех случаях (кроме тех, когда происходит взаимодействие с Windows API).

а что будет в мультиязычных проектах, или если в какой-то либе wchar_t ?
Мультиязычность никак не пострадает если UTF-16 заменить на UTF-8. Одно в другое конвертируется без потерь.

Исторически сложилось что MS не как все. WinAPI (и другие продукты MS) используют UTF-16, а ПО и библиотеки других разработчиков в основном UTF-8.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021944
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл уточнить - речь исключительно про линух

с винды бежать надо подальше. Вот неплохая статья.
авторНе так давно озадачился вопросом кроссплатформенной работы со строками в приложениях 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.
#ifdef _WIN32
typedef std::wstring mstring;
#else
typedef std::string mstring;
#endif // _WIN32
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021964
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Исторически сложилось что MS не как все. WinAPI (и другие продукты MS) используют UTF-16,

какое отношение к WINAPI имеет Java и Javascript?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021973
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
Dima T
Исторически сложилось что MS не как все. WinAPI (и другие продукты MS) используют UTF-16,

какое отношение к WINAPI имеет Java и Javascript?

Понятия не имею.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021974
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78
забыл уточнить - речь исключительно про линух
ну а тогда в чем вопрос?
Если линукс то берем std::string.
Если винда и линукс то неизбежно директива компилятору if винда... else...
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021975
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Исторически сложилось что MS не как все.
Уже вливается в основное русло.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021979
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, скорее всего если что и будут делать, то ограничатся комплектом оберток.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40022066
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpВ дельфи, java строка это класс.

За Яву не скажу, но в Дельфи строка это обёртка для массива байт.

В очень старых дельфях это был массив байт с длиной в нулевом элементе.
В умеренно старых дельфях это был указатель на null-terminated массив с дополнительными полями длины и счётчика ссылок по отрицательным смещениям.
В современных дельфях это простой указатель на null-terminated массив UTF-16.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40022082
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024191
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace

Каждую простейшую стандартную операцию над текстом придётся отдельно гуглить и писать свои реализации? Это же капец, не?

Весёлая тема. Посмеялся с твоих коментов. Да, это капец, но мы так живём.

Можешь посмотреть библиотеку Boost String Algorithms .
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024342
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Так. Никого мы обсуждать не будем. Не личности и не образование.

И коверкать не надо. Это - прописано в правилах форума.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024350
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
tip78
забыл уточнить - речь исключительно про линух
ну а тогда в чем вопрос?
Если линукс то берем std::string.
Если винда и линукс то неизбежно директива компилятору if винда... else...

wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет (но это опять же на линухе тестировалось)
значит все виндузятники обречены быть медленнее линуха ещё и из-за строк?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024353
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтоб виндузятники уж точно-точно были оберчены - нужен некий показательный бенчмарк
со строками.

А с бенчмарками есть проблема. Их - сложно обосновать.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024354
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78
PetroNotC Sharp
пропущено...
ну а тогда в чем вопрос?
Если линукс то берем std::string.
Если винда и линукс то неизбежно директива компилятору if винда... else...

wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет (но это опять же на линухе тестировалось)
значит все виндузятники обречены быть медленнее линуха ещё и из-за строк?

Это что ещё за бред? Откуда такие выводы про работу с памятью?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024357
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет

А тебя не смущает, что это специализации одного темплейта, то есть код у них абсолютно
одинаковый?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024360
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78
PetroNotC Sharp
пропущено...
ну а тогда в чем вопрос?
Если линукс то берем std::string.
Если винда и линукс то неизбежно директива компилятору if винда... else...

wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет (но это опять же на линухе тестировалось)
значит все виндузятники обречены быть медленнее линуха ещё и из-за строк?

Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32.
Так что текстовые процессоры на std::wstring должны обгонять аналоги на std::string. Хотя я тут не уверен, конечно.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024363
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

tip78wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет

А тебя не смущает, что это специализации одного темплейта, то есть код у них абсолютно
одинаковый?..

Не специализация. Инстанцирование (явное). Если бы это были специализации, то код у них был бы разный.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024374
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
перепутал, сорри
это если конкатенацию изменить с "+=" на "+", то посыпятся маллоки
а ещё wcout за каждый << добавляет malloc. А cout - нет.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024379
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
tip78
пропущено...

wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет (но это опять же на линухе тестировалось)
значит все виндузятники обречены быть медленнее линуха ещё и из-за строк?

Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32.
Так что текстовые процессоры на std::wstring должны обгонять аналоги на std::string. Хотя я тут не уверен, конечно.

У меня - ощущение дежа-вю.

Мне кажется что ты уже поднимал подобные топики. За что будешь топить в этот раз?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024381
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav
пропущено...

Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32.
Так что текстовые процессоры на std::wstring должны обгонять аналоги на std::string. Хотя я тут не уверен, конечно.

У меня - ощущение дежа-вю.

Мне кажется что ты уже поднимал подобные топики. За что будешь топить в этот раз?

?! Я просто ответил на пост юзера tip78. А тебе по теме есть что сказать? Или как обычно?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024387
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32.

С чего вдруг? Кинуть две лопаты быстрее чем одну, а четыре быстрее чем две. Вечный двигатель?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024388
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
petrav
Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32.

С чего вдруг? Кинуть две лопаты быстрее чем одну, а четыре быстрее чем две. Вечный двигатель?

Если речь идёт о копировании строк, то конечно utf-8 лидер. Если речь идёт о манипулировании строками, то по сути utf-8 — это лёгкая форма архиватора zip. Даже просто пронавигировать по всем символам utf-8 — это анализ каждого байта.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024389
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
petrav
Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32.

С чего вдруг? Кинуть две лопаты быстрее чем одну, а четыре быстрее чем две. Вечный двигатель?

+1
[spoiler] Раз-два
YouTube Video
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024393
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Я просто ответил на пост юзера tip78
дак вы с ним спелись.
Какой смысл обсуждать вам двоим скорость без прикладного смысла, постановки задачи и ограничений?
))
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024398
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
пропущено...

У меня - ощущение дежа-вю.

Мне кажется что ты уже поднимал подобные топики. За что будешь топить в этот раз?

?! Я просто ответил на пост юзера tip78. А тебе по теме есть что сказать? Или как обычно?

Ладно извини.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024437
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32.
Не должна и не будет.
По тривиальной причине, которая никак не доходит до любителей "сильно оптимизированных (по)граничных случаев": любая кодировка юникода обязана работать с составными символами и выполнять различные нормализации.
Это, мопвашуять, естественные алфавиты со своими исторически сложившимися и нелогичными правилами.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024438
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Даже просто пронавигировать по всем символам utf-8 — это анализ каждого байта.
" Просто оставлю это здесь ".
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024440
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
ЗЫ: В utf8 и (иногда) в utf16, при посимвольной обработке требуется отделять один символ от другого, ибо могут попадаться суррогатные пары. В utf32 такого нет.
Суррогатные пары разрешены только в UTF16 и запрещены как в UTF32, так и в UTF8. Извраты, конечно, существуют, ну так на то они и извраты.
Ну и вообще - матчасть учите.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024521
teo609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первые страницы этого топика оставляют впечатление, что считающие себя корифеями того... слегка в своей корифейности засахарились.

В других языках как правило есть стандартный тип строки. Приходящие в С++ из других ЯП сталкиваются с тем, что здесь такого нет.

Наверное можно объяснить нормально, почему типа (класса) стандартной строки в С++ нет.

Потому что стандартной строки нет.
И проще всего это показать на той же самой кириллице, которая в С++ хранится в разных видах, например 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 байта.
Разное и переменное число байт на символ и обуславливает разные наборы операций в разных типах строк.

Программист под каждое сочетание входных, хранимых, и выходных кодировок может выбрать самое эффективное преобразование строк в каждом случае. Ради этой эффективности нет стандартной строки, общей для всех кодировок. В других ЯП, где есть стандартный тип строки, выбран один из возможных вариантов кодирования строк, но при работе с другими кодировками обычно приходится преобразовывать их через стандартный тип, что не столь эффективно, даже если и удобно.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024528
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teo609
что не столь эффективно, даже если и удобно.
переведи.
Удобно, но неэффективно это как?))))
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024530
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teo609,
Проблема в том что вы заботитесь о компе а не о программисте?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024533
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teo609
корифейности засахарились
получается ты засахарился. 5 раз про эффективность и ниче непонятно)
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024558
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teo609

1. Windows CP-1251. В С++ типы char и string. 1 символ - 1 байт.

Это уже обсуждали. Это - 20й век. Это прошло. Современные требования разработки - это ориентация
софта во внешний мир. Без курса на изоляционизма. Без обособленности.

Подобного рода решения сегодня приводят к неработающим консолям и UI-приложениям и даже (!)
сайтам где еще можно встретить cp866 или koi8r. Интерес такое кодирование представляет
лишь археологический. А damage котороый привносит однобайтная кодировка в будущем
несравненно выше чем какие-то сомнительные экономии которые там находятся.

Американский ASCII пускай так и останется однобайтным в нижней части таблицы.
Он заслужил право там стоять по историческим причинам и по стандартам де-факто.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024589
teo609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
teo609

1. Windows CP-1251. В С++ типы char и string. 1 символ - 1 байт.

Это уже обсуждали. Это - 20й век. Это прошло. Современные требования разработки - это ориентация
софта во внешний мир. Без курса на изоляционизма. Без обособленности.

...


Возможно. Я привел те кодировки, с которыми работаю. В CP-1251 я сохраняю логи на машинах пользователей. Компактнее хранится, легко смотрится, треубется редко. Пока еще реально востребованная кодировка, даже если не в мейнстриме.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024592
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teo609
Компактнее хранится, легко смотрится, треубется редко.
добавь ещё... прогеры и юзвери мучаются.
А требуется редко это плюс или минус?
...
У нас тут прогер решил KOI 8R использовать. Тоже решал наверно в прошлом тысячилетии.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024615
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teo609В других языках как правило есть стандартный тип строки. Приходящие в С++ из других ЯП
сталкиваются с тем, что здесь такого нет.

Если они не понимаю как строки работают в "других ЯП", то лучше им и не приходить. Потому
что фактической разницы нет. От того, что std::string где-то спрятан за compiler magic и
RTL, он не становится чем-то другим.

teo609В других ЯП, где есть стандартный тип строки, выбран один из возможных вариантов
кодирования строк

И чем это отличается от "выбранного" std::string?

Какой тип строки является "стандартным" в Дельфи? WideString, AnsiString, UTF8String или
тупо String, который является алиасом одного из предыдущих в зависимости от версии и опций
компилятора?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024618
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Какой тип строки является "стандартным" в Дельфи? WideString, AnsiString, UTF8String или
тупо String, который является алиасом одного из предыдущих в зависимости от версии и опций
компилятора?..

Ну как бы Делфи — это моветон.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024623
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Ну как бы Делфи — это моветон.
Вопроса-то это не отменяет.
А вопрос появился потому, что teoXXX несколько, как бы это помягче выразить ... Загоняется, в общем, на ровном месте.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024631
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Ну как бы Делфи — это моветон.
это для дремучих только.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024632
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravНу как бы Делфи — это моветон.

....как и любой другой язык в котором есть "стандартные строки". И чо?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024648
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravНу как бы Делфи — это моветон.

....как и любой другой язык в котором есть "стандартные строки". И чо?

Я, например, не вижу практического смысла в таком алиасе:

авторКакой тип строки является "стандартным" в Дельфи? WideString, AnsiString, UTF8String или
тупо String, который является алиасом одного из предыдущих в зависимости от версии и опций
компилятора?..
Зачем оно?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024657
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЗачем оно?

Это ты у топикстартера спрашивай "зачем в других ЯП существуют стандартные строки?"
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
125 сообщений из 125, показаны все 5 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Несколько глупых вопросов по std::string и std::wstring
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]