![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Мне нужно решить задачу, в которой нужно подсчитать количество слов в предложении. Я решил это сделать при помощи функции strtok. Я не понимаю, почему программа не работает корректно?
Код:
|
#2
|
||||
|
||||
![]() Ну вопервых tokenPtr = strtok(NULL, " "); ничего вам не даст. Икать пробел надо в строке, так как вы это делали выше tokenPtr = strtok(s, " ");
Во вторых, вы ничего не делаете со строкой в цикле и будет цикл у вас поэтому крутится до бесконечности. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Вместо scanf("%s", s); используйте
Код:
Цитата:
|
#4
|
|||
|
|||
![]() То есть как это в строке? Вот так
Код:
|
#5
|
||||
|
||||
![]() Ничего не делайте, просто замените
Код:
Код:
|
#6
|
||||
|
||||
![]() Код:
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 25.06.2013 в 14:31. |
#7
|
|||
|
|||
![]() Ваша программа выполняется не для всех значений.
|
#8
|
||||
|
||||
![]() Например, для каких не выполняется?
<слово><пробел>(<пробел>)*<слово> - выполняется. <слово><конец строки> - выполняется. <слово><пробел><конец строки> - выполняется. Все комбинации описанных правил тоже выполняются. Однобуквенные слова обрабатываются верно. Тестил на строках Код:
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 25.06.2013 в 19:44. |
#9
|
||||
|
||||
![]() Пардон если слишком толсто, зато работает, тестил, вроде ошибок нет.
Код:
Последний раз редактировалось orion_asm, 28.06.2013 в 22:36. |
#10
|
|||
|
|||
![]() Цитата:
|
#11
|
||||
|
||||
![]() Более оптимизированный и правильный с точки зрения задачи код (слово все-таки это не символ, поэтому это минимум 2 символа).
Код:
Последний раз редактировалось orion_asm, 30.07.2013 в 04:42. |
#12
|
||||
|
||||
![]() Цитата:
Цитата:
Да, я некропостер. Ток все равно ветка форума полудохлая. jmp $ ; Happy End! The Cake Is A Lie. |
#13
|
||||
|
||||
![]() Цитата:
![]() *** А, понял что вы имели в виду - если ввести "а" или "б". Ну да, можно "допилить" алго, если соответствующее условие будет в задаче. Исходил из того, что слово есть набор как минимум 2 любых символов. Последний раз редактировалось orion_asm, 09.08.2013 в 02:35. |
#14
|
||||
|
||||
![]() Я имел в виду, что по правилам русского языка в предложении "Книга лежит в шкафу" четыре слова. Поэтому дополнительно поставленное условие "минимум 2 символа" приведет к невыполнению условия изначального задания "подсчитать количество слов в предложении" (такой алгоритм не учтёт предлог "в").
Цитата:
![]() Кстати сей код у меня регулярно падает. Дебажный gets_s забивает свободную часть строки байтами 0xFE, и естественно дописывание пробела на конце убивает строку. И еще немного багии: Цитата:
Все эти баги из-за приведенной выше строки. И напоследок, мои любимые упоротые бенчмарки. Тот код, что я кидал раньше, с небольшой правкой в начале, и поправленный код orion_asm (добавление пробела на конец вынес отдельно, чтоб не править строку постоянно), миллион повторений, время в тиках (GetTickCount), релиз-сборка VS2012. Цитата:
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 09.08.2013 в 11:52. |
#15
|
||||
|
||||
![]() Цитата:
[/quote] |