 |
И еще задача |
 |
23.04.2004, 19:25
|
#1
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
И еще задача
На этот раз предлагаю следующую:
дано: std::string с каким - либо содержанием
надо: убрать все ведущие и конечные пробелы, а в середине слова оставить только единичные.
Пример:
" хелло ворлд йо! "
будет:
"хелло ворлд йо!".
Решение желательно короче - чем короче тем лучше
|
|
|
24.04.2004, 07:47
|
#2
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Code:
string::size_type pos = s.find_last_not_of(' ');
if(pos != string::npos)
s.erase(pos + 1);
pos = s.find_first_not_of(' ');
if(pos != string::npos)
s.erase(0, pos);
for(string::iterator it = s.begin(); (it = adjacent_find(it, s.end())) != s.end(); s.erase(it));
Last edited by Aram Hambardzumyan; 24.04.2004 at 07:57.
|
|
|
24.04.2004, 08:55
|
#3
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Code:
s.erase(find_if(s.rbegin(), s.rend(), bind1st(not_equal_to<char>(), ' ')).base(), s.rbegin().base());
s.erase(s.begin(), find_if(s.begin(), s.end(), bind1st(not_equal_to<char>(), ' ')));
for(string::iterator it = s.begin(); (it = adjacent_find(it, s.end())) != s.end(); s.erase(it));
ужас!
|
|
|
24.04.2004, 09:26
|
#4
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
Quote:
Originally Posted by Aram Hambardzumyan
Code:
string::size_type pos = s.find_last_not_of(' ');
if(pos != string::npos)
s.erase(pos + 1);
pos = s.find_first_not_of(' ');
if(pos != string::npos)
s.erase(0, pos);
for(string::iterator it = s.begin(); (it = adjacent_find(it, s.end())) != s.end(); s.erase(it));
|
Этот вариант, как и следующий не работают, так как adjacent_find вернет тебе правильный итератор в слове aardvark, что уберет одну букву а, что явно нам не желательно.
|
|
|
24.04.2004, 09:29
|
#5
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
Кроме того, что является моей ошибкой в постановке задачи, символы перевода на новую строку, табуляция и прочие тоже считаем за пробелы
|
|
|
24.04.2004, 09:34
|
#6
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
У меня 2 решения одно в лоб и длинное, другое с стиле STL и короткое:
PHP Code:
struct PAreBothSpaces //: public std::binary_function<char, char, bool>
{
inline bool operator()(const char & c1, const char & c2) const {
return isspace(c1) && isspace(c2);
}
};
void remove_redundant_spaces(std::string & s) {
s.erase(std::unique(s.begin(), s.end(), PAreBothSpaces()), s.end());
if (s.size() && isspace(*s.rbegin()))
s.resize(s.length() - 1);
if (s.size() && isspace(*s.begin()))
s.erase(s.begin());
}
|
|
|
25.04.2004, 16:16
|
#7
|
....
Join Date: 04 2004
Location: Across the Universe
Age: 41
Posts: 2,497
Rep Power: 5
|
ne takaya uzh trudnaya zadacha 
xotay naprimer na java budet polegche chem na C++
|
|
|
26.04.2004, 05:24
|
#8
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
А кто-то говорил, что она сложна? 
В QT есть встроеная фунцкия в QString, которая делает это (Сам не видел, с QT не работал, но знающие люди говорили).
|
|
|
26.04.2004, 08:33
|
#9
|
....
Join Date: 04 2004
Location: Across the Universe
Age: 41
Posts: 2,497
Rep Power: 5
|
pro QTString ya tozhe ne slishala !
no i bez etogo mozhno oboitis'
|
|
|
26.04.2004, 08:57
|
#10
|
Академик
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
|
скорость кода - прежде всего.
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/
|
|
|
26.04.2004, 11:16
|
#11
|
....
Join Date: 04 2004
Location: Across the Universe
Age: 41
Posts: 2,497
Rep Power: 5
|
soglasna !
|
|
|
26.04.2004, 12:58
|
#12
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
Скорость кода химера.
Premature Optimization is Evil D.E.Knuth.
Пока с профайлером не посидел и не увидел, где медленно и что медленно - надо работать по принципу "самая простая вещь, которая сработает", а все остальное делается потом.
|
|
|
26.04.2004, 13:23
|
#13
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Quote:
Originally Posted by Agregat
Скорость кода химера.
Premature Optimization is Evil D.E.Knuth.
Пока с профайлером не посидел и не увидел, где медленно и что медленно - надо работать по принципу "самая простая вещь, которая сработает", а все остальное делается потом.
|
при этом лучше все-таки постараться, чтобы первая сработавшая вещь была уже достаточно быстрой без профайлера - избегание лишних копирований, повторных инициализаций, плохого дизайна...
|
|
|
26.04.2004, 14:32
|
#14
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
Плохая архитектура не имеет никакого отношения к явному кодированиюб это о дизайне.
Присутствие остальных пунктов в твоем перечислении говорит о некачественном кодировании и кривых руках программиста, и имеет мало отношения к технологии - в данном случае C++ Standard Library и алгоритму - в данном случае удаление повторяющихся пробелов.
Мое скрoмное ИМХО (C) утверждает, что STTWW срабатывает в большинстве случаев, если ручки не кривые.
Я думаю, что короткий и понятный код в несколько раз лучше чем запутанный сложный код с goto, который делает все на 50мс быстрее. Простой код - легче отлаживать и быстрее написать. Ведь основаная проблема в написание софта это опоздание от графика (e.g. Mythical Man-Month), а простой код пишется и сдается пользователю гораздп быстрее.
Вот... что-то я разговорился
|
|
|
 |
26.04.2004, 15:15
|
#15
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Quote:
Originally Posted by Agregat
Присутствие остальных пунктов в твоем перечислении говорит о некачественном кодировании и кривых руках программиста, и имеет мало отношения к технологии - в данном случае C++ Standard Library и алгоритму - в данном случае удаление повторяющихся пробелов.
|
если говорить только об этом примере, то да. просто я писал вообще. и конечно не призывал лезть из кожи и искать лазейки в обход stl
хотя, если программист опытный, то он и в общем случае с первого раза скодирует правильно и 'локально-оптимально'  наверное ты это подразумевал, когда говорил о первой вещи, которая сработает.
кстати, а что за зверь STTWW ?
|
|
|
All times are GMT. The time now is 01:39. |
|
|