powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Несколько глупых вопросов по std::string и std::wstring
25 сообщений из 125, страница 3 из 5
Несколько глупых вопросов по 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
25 сообщений из 125, страница 3 из 5
Форумы / C++ [игнор отключен] [закрыт для гостей] / Несколько глупых вопросов по std::string и std::wstring
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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