![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
Работа со строками - а в частности с AnsiString.
Требуется вывести предложения с наибольшим количеством слов. Вопрос к профи: функция word_counter(char *a) правильно работает, но при работе с AnsiString - неверно выдает количество слов в предложении.
-------------------- i_i (';') (V) ![]() |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Кто так пишет?!? Убил бы.
strlen(a) - долгая функция. Она перебирает каждый символ строки. Это тебе не iterator! А с обычными строками работает (не AnsiString)? |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
вообще такой корявый алгоритм.
Попробуй применить strtok для подсчета слов в предложении. неправильно выдает в первую очередь из-за этого
согласен с предыдущим оратором - крайне коряво написано. Чего только do-while стоит... |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Человек, наверное, не знает, как пользоваться for(;;).
Так, имхо, лучше (я не отлаживал, правда). |
|||
|
||||
| Hose |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 11.4.2006 Репутация: 1 Всего: 1 |
я конечно не профи и по проблемме ничего сказать не могу. Но крайне не люблю необоснованные обвинения. Поэтому сам проверил производительность двух предложеных вариантов.
код:
Измерения проводились по часам, поэтому достаточно грубы. MSVS 2005 вариант от Voldemar2004 выполнялся 13 секунд, вариант от bsa 21 секунду. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Мой вариант:
real 0m32.741s user 0m32.274s sys 0m0.072s Вариант Voldemar2004: real 1m24.101s user 1m23.853s sys 0m0.188s Компиляция производилась с помощью gcc-3.4.5. Использовалась библиотека glibc-2.3.6-r3. Тистировалось на "Linux b-s-a 2.6.15-gentoo-r7 #1 PREEMPT Mon Mar 6 11:45:01 MSK 2006 x86_64 AMD Athlon 64 Processor 3000+ GNU/Linux" с помощью стандартной утилиты time. Добавлено @ 10:52 Хотя, его процедура считает правильней. Но только в данном конкретном случае. |
|||
|
||||
| Voldemar2004 |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
Hose,
Вот так выдаст правильное количество слов:
Ее еще надо отлаживать для всех случаев. -------------------- i_i (';') (V) ![]() |
||||||||||||
|
|||||||||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |