AKB Forums

Go Back   AKB Forums > Technical sections > Languages, Compilers and Interpreters
Home Register Blogs FAQ Members List Calendar Downloads Arcade Mark Forums Read

Languages, Compilers and Interpreters C,C++,C#,.NET,Java,PHP,Perl,SQL and more

Troubles when posting message? Click here! :: Проблемы с отправлением сообщения? Нажмите сюда!

Reply
 
LinkBack Thread Tools Display Modes
Old Apr 23, 2004, 19:25   #1
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,546
Rep Power: 11
Reputation: 169
Send a message via ICQ to Agregat Send a message via MSN to Agregat
И еще задача

На этот раз предлагаю следующую:
дано: std::string с каким - либо содержанием
надо: убрать все ведущие и конечные пробелы, а в середине слова оставить только единичные.
Пример:
" хелло ворлд йо! "
будет:
"хелло ворлд йо!".
Решение желательно короче - чем короче тем лучше
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
Agregat is offline   Reply With Quote Quote selected
Old Apr 24, 2004, 07:47   #2
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: Jan 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,178
Rep Power: 7
Reputation: 45
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 : Apr 24, 2004 at 07:57.
Aram Hambardzumyan is offline   Reply With Quote Quote selected
Old Apr 24, 2004, 08:55   #3
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: Jan 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,178
Rep Power: 7
Reputation: 45
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));
ужас!
Aram Hambardzumyan is offline   Reply With Quote Quote selected
Old Apr 24, 2004, 09:26   #4
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,546
Rep Power: 11
Reputation: 169
Send a message via ICQ to Agregat Send a message via MSN to Agregat
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
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
Agregat is offline   Reply With Quote Quote selected
Old Apr 24, 2004, 09:29   #5
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,546
Rep Power: 11
Reputation: 169
Send a message via ICQ to Agregat Send a message via MSN to Agregat
Кроме того, что является моей ошибкой в постановке задачи, символы перевода на новую строку, табуляция и прочие тоже считаем за пробелы
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
Agregat is offline   Reply With Quote Quote selected
Old Apr 24, 2004, 09:34   #6
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,546
Rep Power: 11
Reputation: 169
Send a message via ICQ to Agregat Send a message via MSN to Agregat
У меня 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
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
Agregat is offline   Reply With Quote Quote selected
Old Apr 25, 2004, 16:16   #7
....
 
JennyWren's Avatar
 
Join Date: Apr 2004
Location: Across the Universe
Posts: 2,500
Rep Power: 5
Reputation: 63
Send a message via ICQ to JennyWren Send a message via Skype™ to JennyWren
ne takaya uzh trudnaya zadacha
xotay naprimer na java budet polegche chem na C++
JennyWren is offline   Reply With Quote Quote selected
Old Apr 26, 2004, 05:24   #8
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,546
Rep Power: 11
Reputation: 169
Send a message via ICQ to Agregat Send a message via MSN to Agregat
А кто-то говорил, что она сложна?
В QT есть встроеная фунцкия в QString, которая делает это (Сам не видел, с QT не работал, но знающие люди говорили).
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
Agregat is offline   Reply With Quote Quote selected
Old Apr 26, 2004, 08:33   #9
....
 
JennyWren's Avatar
 
Join Date: Apr 2004
Location: Across the Universe
Posts: 2,500
Rep Power: 5
Reputation: 63
Send a message via ICQ to JennyWren Send a message via Skype™ to JennyWren
pro QTString ya tozhe ne slishala !
no i bez etogo mozhno oboitis'
JennyWren is offline   Reply With Quote Quote selected
Old Apr 26, 2004, 08:57   #10
Administrator
 
greka's Avatar
 
Join Date: Sep 2001
Location: @work
Posts: 5,347
Rep Power: 10
Reputation: 23
Send a message via ICQ to greka
скорость кода - прежде всего.
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/
greka is offline   Reply With Quote Quote selected
Old Apr 26, 2004, 11:16   #11
....
 
JennyWren's Avatar
 
Join Date: Apr 2004
Location: Across the Universe
Posts: 2,500
Rep Power: 5
Reputation: 63
Send a message via ICQ to JennyWren Send a message via Skype™ to JennyWren
soglasna !
JennyWren is offline   Reply With Quote Quote selected
Old Apr 26, 2004, 12:58   #12
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,546
Rep Power: 11
Reputation: 169
Send a message via ICQ to Agregat Send a message via MSN to Agregat
Скорость кода химера.
Premature Optimization is Evil D.E.Knuth.
Пока с профайлером не посидел и не увидел, где медленно и что медленно - надо работать по принципу "самая простая вещь, которая сработает", а все остальное делается потом.
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
Agregat is offline   Reply With Quote Quote selected
Old Apr 26, 2004, 13:23   #13
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: Jan 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,178
Rep Power: 7
Reputation: 45
Quote:
Originally Posted by Agregat
Скорость кода химера.
Premature Optimization is Evil D.E.Knuth.
Пока с профайлером не посидел и не увидел, где медленно и что медленно - надо работать по принципу "самая простая вещь, которая сработает", а все остальное делается потом.
при этом лучше все-таки постараться, чтобы первая сработавшая вещь была уже достаточно быстрой без профайлера - избегание лишних копирований, повторных инициализаций, плохого дизайна...
Aram Hambardzumyan is offline   Reply With Quote Quote selected
Old Apr 26, 2004, 14:32   #14
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,546
Rep Power: 11
Reputation: 169
Send a message via ICQ to Agregat Send a message via MSN to Agregat
Плохая архитектура не имеет никакого отношения к явному кодированиюб это о дизайне.
Присутствие остальных пунктов в твоем перечислении говорит о некачественном кодировании и кривых руках программиста, и имеет мало отношения к технологии - в данном случае C++ Standard Library и алгоритму - в данном случае удаление повторяющихся пробелов.
Мое скрoмное ИМХО (C) утверждает, что STTWW срабатывает в большинстве случаев, если ручки не кривые.
Я думаю, что короткий и понятный код в несколько раз лучше чем запутанный сложный код с goto, который делает все на 50мс быстрее. Простой код - легче отлаживать и быстрее написать. Ведь основаная проблема в написание софта это опоздание от графика (e.g. Mythical Man-Month), а простой код пишется и сдается пользователю гораздп быстрее.
Вот... что-то я разговорился
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
Agregat is offline   Reply With Quote Quote selected
Old Apr 26, 2004, 15:15   #15
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: Jan 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,178
Rep Power: 7
Reputation: 45
Quote:
Originally Posted by Agregat
Присутствие остальных пунктов в твоем перечислении говорит о некачественном кодировании и кривых руках программиста, и имеет мало отношения к технологии - в данном случае C++ Standard Library и алгоритму - в данном случае удаление повторяющихся пробелов.
если говорить только об этом примере, то да. просто я писал вообще. и конечно не призывал лезть из кожи и искать лазейки в обход stl

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

кстати, а что за зверь STTWW ?
Aram Hambardzumyan is offline   Reply With Quote Quote selected
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Задача Solger Fun 2 Jan 22, 2004 10:57
Нетривиальная задача Boyov Algorithms 22 Nov 12, 2003 17:40
Задача. Gates Fun 0 Oct 24, 2002 19:22
Tрудная Задача / Длинная арифметика Rainman Algorithms 8 Oct 4, 2002 13:53
Задача Эйнштейна Gates General 1 Aug 7, 2002 06:19


All times are GMT. The time now is 12:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
This board was founded on September 29, 2001
Powered by Viper Internet

Affordable Web Hosting | ParevNet

Buy text link