|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.08.2009, 03:37 | #1 |
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
Помогите найти ошибку (Visual c++)
Есть задача - Напишите программу, которая использует генерацию случайных чисел для сохдания предложений. Программа должна использовать 4 массива указателей на char (см. ниже код).
Программа должна создавать предложения, случайно выбирая слова из каждого массива в следующем порядке(порядок см. ниже в коде). Как только слово выбрано, оно должно быть подсоединено к предыдущему слову в массиве, который достаточно велик для того, чтобы вместить все предложение. Слова должны быть разделены пробелами. При выводе окончательного предложения(готового) оно должно начинаться с заглавной буквы и заканчиваться точкой. Программа должна генерировать 20 таких предложений. То что я написал не работает, помогите пожалуйста найти ошибки. Код: Код:
|
07.08.2009, 08:59 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Так пойдёт?
Код:
|
07.08.2009, 11:17 | #3 | ||
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
Цитата:
Цитата:
Я думал что надо строку, перекинуть в массив, а потом уже передавать адрес 1 элемента (константный адрес - имя массива). вот так я и сделал Код:
Код:
Код:
ЗЫ Ваш код пока не тестировал (проблемы с компом)но думаю он рабочий. |
||
07.08.2009, 11:39 | #4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Увеличивается указатель на строку article[rnd_word], т.е. по факту вы "забываете" про первый символ, а звёздочка разыменовывает указатель, т.е. результатом будет первый символ строки article[rnd_word]
Код:
Код:
Код:
|
08.08.2009, 14:28 | #5 | |
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
Спасибо pu4koff ! Ваш код работает...лол...там такой бред сгенерировался
Цитата:
И я не понял, в вашем примере, куда исчезают буквы из 1 элемента (1 строки) // article[0] == "the" // article[0] == "he" // article[0] == "e" Насколько я понял, таким образом *article[rnd_word]++ при каждом увеличении я разыменовываю следующею букву. А в втором случае, из вашего объяснения и примера я понял что эта строка*article[rnd_word++] указывает (с каждым увеличением)) на другую строку.(Поправте если я не прав). |
|
08.08.2009, 14:40 | #6 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
Для такой реализации надо заводить временную переменную: Код:
|
|
08.08.2009, 14:59 | #7 | |
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
Цитата:
Может я чего то недопонял в самом процессе разыменования... |
|
08.08.2009, 20:35 | #8 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Никуда не деваются. Просто фишка в следующем. Строка - есть массив символов. Массив - это кусок памяти и имеется у нас для доступа только указатель на первый элемент. Когда пишете инкремент ++, то переходите на следующий символ, т.е. указатель на наш массив символов смещается на 1 байт и тем самым теряем первый символ. Он никуда не пропадает, но указатель на него мы теряем.
Ну это как если пришли за квартиру платить, а там очередь. Вы спрашиваете: кто первый? У первого потом спрашиваете: кто за тобой? И запоминаете этого человека уже как первого. Так проходите всю очередь и в итоге первым запомнили последнего, а кто первый уже забыли. Для поиска первого уже придется последнего спрашивать: кто перед тобой? и так до первого дойдем Если без временной переменной, которая будет хранить указатель на n-й символ строки, то либо работать со строкой как с массивом символов: Код:
или так: Код:
Разыменование в принципе ничего не делает. Просто компилятору говорим, что нужен не адрес, а то что по этому адресу записано. |
08.08.2009, 22:02 | #9 | |
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
Цитата:
Если подвести итог получается: 1)*article[rnd_word]++ - Эта строка инкрементирует указатель на первый элемент, n-ой строки. 2)*article[rnd_word++] - Это строка инкрементирует указатель на строку(с каждым увеличением указатель указывает на 1 символ следующей строки). |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите найти ошибку! | junkie | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 03.05.2009 14:22 |
Помогите найти ошибку (С++) | Alex1991 | Помощь студентам | 1 | 11.04.2009 15:19 |
Помогите найти ошибку (С++). | TheWanderer | Помощь студентам | 1 | 19.03.2009 15:00 |
помогите найти ошибку! | Picaso18 | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 24.01.2009 15:32 |