Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
ResourceSpace,
Ты тролль?
Вопрос был такой - Зачем бороться и удалять символы конца строки?
Ты ответил
автор
В данном тексте, написанном и отправленным на форум вами - содержатся символы "\r" и "\n".
Если выделить текст любой из ваших цитат и скопировать в буфер обмена - в буфере обмена тоже будут содержаться символы "\r" и "\n".
Если вставить текст из буфера обмена в программу "Блокнот" и сохранить в файл - в дочернем окне "Блокнота" с классом EDIT будет установлен текст, содержащий символы "\r" и "\n", и в файле тоже будут символы "\r" и "\n".
Для вас это сюрприз..?

Не врубился что спрашивают в вопросе?
11 ноя 20, 17:53    [22230320]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
ResourceSpace
Member

Откуда:
Сообщений: 27
Что значит "зачем"? Потому что в тексте они есть по факту, а мне нужен текст без них.
Абсолютно нормальные символы для многострочного текста. И с чего бы им самим куда-то там "пропадать"?
Неужели не достаточно частая задача - сделать тексту Trim()?

Да хоть такое для теста взять, предположим вот чужой код:
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
11 ноя 20, 18:44    [22230358]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

ResourceSpace
В данном тексте, написанном и отправленным на форум /_вами_/ - содержатся символы "\r" и "\n".
Если выделить текст любой из ваших цитат и скопировать в буфер обмена - в буфере обмена
тоже будут содержаться символы "\r" и "\n".
Если вставить текст из буфера обмена в программу "Блокнот" и сохранить в файл - в дочернем
окне "Блокнота" с классом EDIT будет установлен текст, содержащий символы "\r" и "\n", и в
файле тоже будут символы "\r" и "\n".
Для вас это сюрприз..?

Лично для меня сюрприз, что ты в этом списке нигде не упомянул std::string. Неужели таки
дошло, что оно с "данным текстом" никак не соотносится?..

Posted via ActualForum NNTP Server 1.5

11 ноя 20, 18:48    [22230361]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
ResourceSpace
Member

Откуда:
Сообщений: 27
Я могу на любом из перечисленных этапов получать текст - хоть из сети, хоть из буфера обмена, хоть из окна, хоть из файла - и хранить в переменной типа std::wstring.
С чего бы "\r" и "\n" куда-то при этом пропадали?
11 ноя 20, 18:53    [22230364]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

ResourceSpace
С чего бы "\r" и "\n" куда-то при этом пропадали?

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

Но, конечно, ты волен писать собственные функции любой степени невменяемости.

Posted via ActualForum NNTP Server 1.5

11 ноя 20, 19:00    [22230369]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
ResourceSpace
Member

Откуда:
Сообщений: 27
Как же по вашему хранится многострочный текст? Вы не в курсе что в WinAPI многострочный текст это один единый массив символов? И во всех нормальных языках тоже?
https://en.cppreference.com/w/cpp/string/basic_string
The class template basic_string stores and manipulates sequences of char-like objects
В вашей же справке написано - не для "одной строки", а для "последовательности символов".
11 ноя 20, 19:08    [22230374]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
ResourceSpace
Не важно откуда оно там взялось, передали так из другого места.

Ну, во первых, профи программист а не тупой кодировщик всегда смотрит на ранг выше и ниже задачу.
Во вторых, мы народ любознательный, и нам просто интересно. Какой идиот дает тебе на вход 20 Enter.
Справедливо?
...
Ну и если ты трижды повторишь: "так надо!" - от тебя отстанут.
Мало ли чудаков на свете.

Сообщение было отредактировано: 11 ноя 20, 19:10
11 ноя 20, 19:13    [22230375]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

ResourceSpace
Как же по вашему хранится многострочный текст?

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

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

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

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

Потребовать что ли от модератора тебя забанить за такое наглое размахивание чужим уставом?..

Posted via ActualForum NNTP Server 1.5

11 ноя 20, 19:19    [22230381]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
Кстати, по мотивам.
Есть в МосЭнерго личный кабинет. И там есть окошко для обращения граждан.
Дак вот, при вводе конечно стараешься формулировать мысль))), оформлять абзацы.
А при сохранении получаем сплошняком текст без концов строк.
Хорошо пробелы оставили))).
Уж не знаю. Может место экономят. Мож экран.
11 ноя 20, 19:25    [22230386]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
ResourceSpace
Member

Откуда:
Сообщений: 27
Я выдумал и привёл аж четыре реальных примера откуда оно могло взяться - этого недостаточно? Особенно учитывая что к непосредственно вопросу это не имело отношения.
Ладно, выдумал пятый пример - прочитать текст из реестра. Технически там нет явных запретов/ограничений на многострочный REG_SZ.



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

Хорошо, хорошо... "И в любых языках в которых есть встроенный тип данных строка" - лучше?
11 ноя 20, 19:28    [22230390]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
ResourceSpace
Я выдумал

ResourceSpace
реальных примера
))))) LOL
Как у тебя с логикой?
Выдумал или реальных?
Я вот выше не выдуманный пример привел.

Сообщение было отредактировано: 11 ноя 20, 19:28
11 ноя 20, 19:32    [22230393]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
ResourceSpace
выдумал пятый пример
а зачем там то удалять?
В реестре каждый знак значимый.
11 ноя 20, 19:36    [22230396]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
ResourceSpace
Member

Откуда:
Сообщений: 27
Я сказал прочитать из реестра, а не перезаписывать в нём.

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

Надо было наверное на каждый мини-вопрос отдельную тему создавать, а то в один вцепились, другие вообще не заметили...
11 ноя 20, 19:44    [22230398]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

ResourceSpace
Я выдумал и привёл аж четыре реальных примера откуда оно могло взяться - этого недостаточно?

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

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

Технически нет в природе функций, позволяющих получить из реестра std::string.

Posted via ActualForum NNTP Server 1.5

11 ноя 20, 19:45    [22230400]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1349
PetroNotC Sharp,>не понимает "<>"
Поясни, о чем речь?
11 ноя 20, 19:48    [22230403]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
d7i
Member

Откуда:
Сообщений: 522
Весь сыр-бор разгорелся из-того, что ТС по-сути талдычит о буфере, который он пытается уложить в строковый тип...
И ясно, что разные функции обработки строк тут не канают.
А по-моему нужно взять буфер из TCHAR и тогда всё станет более-менее ясно.
#ifdef _UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif
11 ноя 20, 19:49    [22230404]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
Я пишу:
PetroNotC Sharp
а зачем там то удалять?[спецсимволы предварительно вычитав оттуда]

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

)))))
11 ноя 20, 19:53    [22230406]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
ResourceSpace
Кто-то может специально или случайно скопировать в буфер 20 Enter? Может.
не люблю прогеров ставящих себе дурацкие задачи.
"Может обезьяна тупо стуча по печатной машинке набить Войну и мир? Может!
11 ноя 20, 19:56    [22230410]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
ъъъъъ
PetroNotC Sharp,>не понимает "<>"
Поясни, о чем речь?
поясняю.
ТС почему то борется если ему пришло 20 Enter.
А если пришло 20 тире то не борется.
Правильно ли это?
11 ноя 20, 20:01    [22230415]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

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

Может, но у тебя ошибка уже в первом посыле "прочитали". В С++ нет функций для работы с
буфером обмена, прочитать его невозможно.

Posted via ActualForum NNTP Server 1.5

11 ноя 20, 20:04    [22230417]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
Dima T
Member

Откуда:
Сообщений: 15282
ResourceSpace
Ну вот из того что я нагуглил, но работает почему-то частично:
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::" этого вообще нет.
11 ноя 20, 20:15    [22230422]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
Dima T
Member

Откуда:
Сообщений: 15282
ResourceSpace
Что значит "зачем"? Потому что в тексте они есть по факту, а мне нужен текст без них.
Абсолютно нормальные символы для многострочного текста. И с чего бы им самим куда-то там "пропадать"?
Неужели не достаточно частая задача - сделать тексту Trim()?

Да хоть такое для теста взять, предположим вот чужой код:
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

А что по твоему лишнее? Ты конкретно покажи как оно без лишнего должно быть. Допустим в итоге так получится
L"ОднаждыВ студёную зимнюю пору,Я из лесу вышел,Был сильный мороз...  \t            ";
Это правильно?
11 ноя 20, 20:21    [22230424]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
ResourceSpace
Member

Откуда:
Сообщений: 27
Я же в первом сообщении объяснял - приложение для 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:
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
Допустим в итоге так получится
L"ОднаждыВ студёную зимнюю пору,Я из лесу вышел,Был сильный мороз...  \t            ";
Это правильно?
Такие стандартные штуки как TrimLeft и TrimRight удаляет пробельные символы только с одного края:
L"Однажды\r\nВ студёную зимнюю пору,\r\nЯ из лесу вышел,\r\nБыл сильный мороз...";
Но желательно до такого вида:
L"однажды\nв студёную зимнюю пору,\nя из лесу вышел,\nбыл сильный мороз...";
11 ноя 20, 20:33    [22230429]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1349
Сомнений нет: ТС - тролль.
11 ноя 20, 20:39    [22230432]     Ответить | Цитировать Сообщить модератору
 Re: Несколько глупых вопросов по std::string и std::wstring  [new]
ResourceSpace
Member

Откуда:
Сообщений: 27
С чего вдруг? Вы просили пояснить проблему - я пояснил.
Могу в виде скриншота показать:

К сообщению приложен файл. Размер - 47Kb
11 ноя 20, 20:45    [22230434]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / C++ Ответить