Через год с появления первой мысли об унификации этой операции для ANSI и UNICODE строк, наконецто я устал от дублирования кода и создал следующее чудовище:
triml,trimr,trim - понятно что они делают self_xxx - то же самое что и xxx, только копия не создается
total_xxx - то же самое что и xxx, только обрезаются все символы от '\0' до ' '
Здравствуйте Коваленко Дмитрий, Вы писали:
КД>Через год с появления первой мысли об унификации этой операции для ANSI и UNICODE строк, наконецто я устал от дублирования кода и создал следующее чудовище:
А у меня ещё вот такое осталось со времён полного господства ANSI. Удаляет всё подряд, в том числе и лишние пробелы из середины.
Доброе утро, IT . Вы писали:
IT>А у меня ещё вот такое осталось со времён полного господства ANSI. Удаляет всё подряд, в том числе и лишние пробелы из середины.
Будем сравнивать?
t_string del_space(const t_string& str,bool all)
{
t_string result;
t_string::const_iterator b,i;
bool skip_space=false;//пропуск пробелов
i=b=str.begin();
for(;i!=str.end();i++)
{
if(!skip_space)
{
if((*i)==_T(' '))
{
skip_space=true;
result.append(b,i+(all?0:1)); //добавляем подстроку (если не all, то включая пробел)
}
}
else//skip_space==trueif(*i!=_T(' '))
{
b=i; //stop skipping
skip_space=false;
}
}//for iif(!skip_space)
result.append(b,i);
return trim(result);//эээх, нужно self_trim использовать
}
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте Коваленко Дмитрий, Вы писали:
IT>>А у меня ещё вот такое осталось со времён полного господства ANSI. Удаляет всё подряд, в том числе и лишние пробелы из середины.
КД>Будем сравнивать?
Да чё там сравнивать. Вот на MFC всё круче получается:
Здравствуйте IT, Вы писали:
IT>Здравствуйте Коваленко Дмитрий, Вы писали:
IT>>>А у меня ещё вот такое осталось со времён полного господства ANSI. Удаляет всё подряд, в том числе и лишние пробелы из середины.
КД>>Будем сравнивать?
IT>Да чё там сравнивать. Вот на MFC всё круче получается:
IT>
Пять баллов . Хотя с минусом. Оно же наверняка осуществляет поиск с начала, таким образом обработка строки "1 — тут типа много-много пробелов, которые процессор RSDN вырезает — N" будет выполнять лишние сдвиги хвоста. Обожаю текстовые задачи. Хотя периодически меня на них рвет (где блюющий смайлик? ).
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте Коваленко Дмитрий, Вы писали:
IT>>Всё прозрачно и очевидно
КД>Пять баллов . Хотя с минусом. Оно же наверняка осуществляет поиск с начала, таким образом обработка строки "1 — тут типа много-много пробелов, которые процессор RSDN вырезает — N" будет выполнять лишние сдвиги хвоста.
Ну тут надо выбирать либо эффекивность, либо прозрачность
КД>Обожаю текстовые задачи. Хотя периодически меня на них рвет (где блюющий смайлик? ).
Не, такого смайлика не будет, он не эстетичен и плохо воспринимается моей тонкой натурой
Если нам не помогут, то мы тоже никого не пощадим.
Вообщем, тоже неплохо, но total_trim на этом не построишь :) Да и достало меня впервую очередь отсутствие (в моей же собственной библиотеке) поддержки обрезания UNICODE.
Сколько программистов, столько вариаций решения trim.
Вот интересно сравнить кто как косвенные массивы и массивы объектов со счетчиками ссылок организует. Сразу скажу — во втором случа массив смарт-указателей не котируется.
Все обещал IT'у написать статью — как раз про это дело, но свободного времени в обозримом будующем не предвидится. Ладно, недельки через две, будем искать автора :)
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте odyssey, Вы писали:
O> ne pomnu gde otkopal, no uzaetsia
Здорово, только бы убрать всякую лабуду в виде g_pGenericStringWhiteSpace, убрать лишнюю строчку с return, добавить удаление пробелов внутри и получится:
КД>>Сколько программистов, столько вариаций решения trim.
dad>может я не совсем уловил суть топика но у меня тоже есть давненько делал:
Однозначно не уловил
Вся фича в том, что в одной программе может быть сразу и ANSI и UNICODE строки, поэтому нужно использовать шаблоны. Ну и раз этот вопрос поднялся наверх, приведу устаканившуюся реализацию обрезателей
КД>>>Сколько программистов, столько вариаций решения trim.
dad>>может я не совсем уловил суть топика но у меня тоже есть давненько делал:
КД>Однозначно не уловил КД>Вся фича в том, что в одной программе может быть сразу и ANSI и UNICODE строки, поэтому нужно использовать шаблоны.
что то я плохо функциональный код воспринимаю.. а разве нельзя тогда оставить код :
template <class _charT>
class btString:public basic_string<_charT>
{
....
}
КД>Ну и раз этот вопрос поднялся наверх, приведу устаканившуюся реализацию обрезателей
спасибо..
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
КД>Однозначно не уловил КД>Вся фича в том, что в одной программе может быть сразу и ANSI и UNICODE строки, поэтому нужно использовать шаблоны. Ну и раз этот вопрос поднялся наверх, приведу устаканившуюся реализацию обрезателей
да уш
есчо бы сюда преобразоание регистра и безрегистровое сравнение .. и было бы замечательно
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Здравствуйте dad, Вы писали:
КД>>Однозначно не уловил КД>>Вся фича в том, что в одной программе может быть сразу и ANSI и UNICODE строки, поэтому нужно использовать шаблоны. Ну и раз этот вопрос поднялся наверх, приведу устаканившуюся реализацию обрезателей dad>да уш dad>есчо бы сюда преобразоание регистра и безрегистровое сравнение .. и было бы замечательно
С этим тоже эпизодически сражаюсь, но пока стратегию не улавливаю
Смутное сомнение, что это можно реализовать согласно стандарту.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Ну и раз этот вопрос поднялся наверх, приведу устаканившуюся реализацию обрезателей
Почитав дядю Мейерса, могу предложить улучшение для шаблонов обрезателей
Использовать алгоритмы вместо циклов или, по крайней мере, не дергать в цикле begin,end
Переписать trimr для использования реверсных итераторов. А то, наверное, сравнивать порядок итераторов — не очень хорошо.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --