Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters

Reply
 
Thread Tools

И еще задача
Old 23.04.2004, 19:25   #1
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default И еще задача

На этот раз предлагаю следующую:
дано: std::string с каким - либо содержанием
надо: убрать все ведущие и конечные пробелы, а в середине слова оставить только единичные.
Пример:
" хелло ворлд йо! "
будет:
"хелло ворлд йо!".
Решение желательно короче - чем короче тем лучше
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 24.04.2004, 07:47   #2
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

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.

Old 24.04.2004, 08:55   #3
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

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));
ужас!

Old 24.04.2004, 09:26   #4
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

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, что уберет одну букву а, что явно нам не желательно.
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 24.04.2004, 09:29   #5
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

Кроме того, что является моей ошибкой в постановке задачи, символы перевода на новую строку, табуляция и прочие тоже считаем за пробелы
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 24.04.2004, 09:34   #6
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

У меня 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());

__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 25.04.2004, 16:16   #7
....
 
JennyWren's Avatar
 
Join Date: 04 2004
Location: Across the Universe
Age: 41
Posts: 2,497
Rep Power: 5
Default

ne takaya uzh trudnaya zadacha
xotay naprimer na java budet polegche chem na C++

Old 26.04.2004, 05:24   #8
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

А кто-то говорил, что она сложна?
В QT есть встроеная фунцкия в QString, которая делает это (Сам не видел, с QT не работал, но знающие люди говорили).
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 26.04.2004, 08:33   #9
....
 
JennyWren's Avatar
 
Join Date: 04 2004
Location: Across the Universe
Age: 41
Posts: 2,497
Rep Power: 5
Default

pro QTString ya tozhe ne slishala !
no i bez etogo mozhno oboitis'

Old 26.04.2004, 08:57   #10
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
Default

скорость кода - прежде всего.
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/

Old 26.04.2004, 11:16   #11
....
 
JennyWren's Avatar
 
Join Date: 04 2004
Location: Across the Universe
Age: 41
Posts: 2,497
Rep Power: 5
Default

soglasna !

Old 26.04.2004, 12:58   #12
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

Скорость кода химера.
Premature Optimization is Evil D.E.Knuth.
Пока с профайлером не посидел и не увидел, где медленно и что медленно - надо работать по принципу "самая простая вещь, которая сработает", а все остальное делается потом.
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 26.04.2004, 13:23   #13
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

Quote:
Originally Posted by Agregat
Скорость кода химера.
Premature Optimization is Evil D.E.Knuth.
Пока с профайлером не посидел и не увидел, где медленно и что медленно - надо работать по принципу "самая простая вещь, которая сработает", а все остальное делается потом.
при этом лучше все-таки постараться, чтобы первая сработавшая вещь была уже достаточно быстрой без профайлера - избегание лишних копирований, повторных инициализаций, плохого дизайна...

Old 26.04.2004, 14:32   #14
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

Плохая архитектура не имеет никакого отношения к явному кодированиюб это о дизайне.
Присутствие остальных пунктов в твоем перечислении говорит о некачественном кодировании и кривых руках программиста, и имеет мало отношения к технологии - в данном случае C++ Standard Library и алгоритму - в данном случае удаление повторяющихся пробелов.
Мое скрoмное ИМХО (C) утверждает, что STTWW срабатывает в большинстве случаев, если ручки не кривые.
Я думаю, что короткий и понятный код в несколько раз лучше чем запутанный сложный код с goto, который делает все на 50мс быстрее. Простой код - легче отлаживать и быстрее написать. Ведь основаная проблема в написание софта это опоздание от графика (e.g. Mythical Man-Month), а простой код пишется и сдается пользователю гораздп быстрее.
Вот... что-то я разговорился
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 26.04.2004, 15:15   #15
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

Quote:
Originally Posted by Agregat
Присутствие остальных пунктов в твоем перечислении говорит о некачественном кодировании и кривых руках программиста, и имеет мало отношения к технологии - в данном случае C++ Standard Library и алгоритму - в данном случае удаление повторяющихся пробелов.
если говорить только об этом примере, то да. просто я писал вообще. и конечно не призывал лезть из кожи и искать лазейки в обход stl

хотя, если программист опытный, то он и в общем случае с первого раза скодирует правильно и 'локально-оптимально' наверное ты это подразумевал, когда говорил о первой вещи, которая сработает.

кстати, а что за зверь STTWW ?
Reply




Реклама:
реклама
Buy text link .

All times are GMT. The time now is 01:39.
Top

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.