![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 21.03.2013
Сообщений: 13
|
![]()
Всем привет
Написал алгоритм для вычисления повторения слов в строке. Но происходит переполнение. Не могли бы вы меня направить в правильном направление? Код должен быть строго по стандартам ANSI C Код:
Последний раз редактировалось Elnamir; 21.03.2013 в 00:52. |
![]() |
![]() |
![]() |
#2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]() Код:
1) for(int j = 0; j <= MAX_WORDS; j++){ - выход за пределы массива 2) <cstring>, <iostream> - это С++, а не Си 3) Переписал так, потому что есть "неприятная" ошибка, связанная с тем, что str2 перед сравнением нужно завершать \0, чтобы strcmp "не лез" в память, не принадлежащую строке (поэтому мне было легче переписать логику, чем исправлять эту ошибку) И пока присутствуют ошибки в формировании str2 (не так идут индексы) - поэтому легче переложить эту работу на компьютер, переписав считывание И вообще, что за ограничители в 100 слов ![]() Только динамическая память, только хардкор
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 21.03.2013 в 01:18. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 21.03.2013
Сообщений: 13
|
![]()
Спасибо, конечно
А можно ли все это реализовать без указателей ? Или указать где у меня ошибка |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 21.03.2013
Сообщений: 13
|
![]()
Большое спасибо за помощь, разобрался. Действительно с динамической памятью легче работать. Просто хотелось все это реализовать статически. Но увы
|
![]() |
![]() |
![]() |
#5 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
Без указателей:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 21.03.2013
Сообщений: 13
|
![]()
Спасибо, что помогли реализовать без указателей. А не могли вы пояснить, что происходит в данной строке while (i < word_count && strcmp(str, arr[i].s)). Само выражение
|
![]() |
![]() |
![]() |
#7 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
word_count - количество уже запомненных слов.
Перебираем все слова от 0 до word_count - 1 (т.е. i < word_count). Сравниваем считанное слово с i-м словом из массива. Выражение будет 0 (выход из цикла) или если в массиве нету больше слов, или если текущее и считанное слово совпали.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Повторение процедуры | Firebird | Общие вопросы Delphi | 6 | 23.11.2012 12:03 |
Вывести слова предложения в таком порядке, чтобы последняя буква каждого слова совпадала с первой буквой следующего слова ( java ) | huhu | Помощь студентам | 0 | 06.04.2012 19:42 |
Повторение команд | Mihanches | Общие вопросы Delphi | 5 | 07.10.2010 14:12 |
Повторение | CraftR14 | Общие вопросы Delphi | 8 | 17.04.2010 20:15 |