![]() |
|
Модераторы: bsa |
![]()
|
|
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Здравствуйте уважаемые программисты!
Дана задача: определить в заданной строке координаты подстроки, содержашей наибольшее число пробелов. Примечание: нельзя обращаться к эелементам массива через указатели (исключение *t = &D[0]). Вот мой код:
На лекциях все понятно объяснили, а значение функий я нашел в поисковике. Несмотря на все это программа не работает! Переменой а все время присваивается 0. Хотел бы понять, что делаю не так. В общем чет совсем запутался с выводом координат Это сообщение отредактировал(а) Garcian - 23.3.2009, 00:47 --------------------
Неродивый студент |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
для начала обнулите буффер для чтения char D[..] = {0}
имхо, тут логичнее использовать функцию strchr ()
перечитайте еще раз что делает функция и подправьте код. еще добавьте строку вывода на экран буффера, после чтения в него с файла и опубликуйте, что получилось в результате (исправленный код + прочиитанная строка с файла). Это сообщение отредактировал(а) mes - 23.3.2009, 10:47 |
||||
|
|||||
| AnLun |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 3.1.2008 Репутация: нет Всего: нет |
Не совсем по теме, но...
это логичней писать так:
Это сообщение отредактировал(а) AnLun - 23.3.2009, 11:19 |
||||
|
|||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
В общем ошибка еще в первой половине программы...
Использую strchr #include <iostream.h> #include <fstream.h> #include <string.h> fstream f, P;
Уже здесь выдает не пойми что Это сообщение отредактировал(а) Garcian - 23.3.2009, 20:09 --------------------
Неродивый студент |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
хватит проверять телепатические способности форумчан . Вы видете и понять не можете, а нам не показываете , а ответа требуете может у Вас файла не находит, или он пустой.
где ? Это сообщение отредактировал(а) mes - 23.3.2009, 20:16 |
|||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Простите!
Например пишу во входном файле одни пробелы - создает файл с кучей пробелов. Если поставить вначале пробелы, а потом буквы - выдает большое кол-во нулей) Если начать не с пробела, то вообще пишет, что их нет.
--------------------
Неродивый студент |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
после 7й строчки (for (int i=0; i < 80; i++) { f >> D[i]; })
поставьте
если вывод на экране не будет соответсвовать файлу, то значит читаете с файла неправильно. Вы не проверяете файл на конец, а это значит, что если в файле меньше запрашиваемых вами 80 символов, то в результативном буффере будет содержать мусор. Это сообщение отредактировал(а) mes - 23.3.2009, 20:34 |
|||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
mes, вы правы, ошибка при чтении... ничего не понимаю, вроде даже проверку на конец строки сделал...
пусто =\ --------------------
Неродивый студент |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Garcian, вы сами поняли, что написали внутри цикла?
Инкрементить i до тех пор, пока значение элемента по адресу t+i не равно '\0' ИЛИ TRUE (т.к. '\n' интерпретируется не нулём, следовательно 1). И получаем бесконечный цикл. Дальше вы выводите cout уже ВНЕ цикла, а не во время каждой итерации. Сомневаюсь, что так было задумано. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
А доступ к элементу массива по индексу считается через указатель?
|
|||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
ай ужс, ввсел вывод внутри цикла, компьютер зазвенел громко) Да я по ходу совсем запутался. Как проверить файл на конец и как прочитать строку, что не пробую все не так. Anikmar, доо, но можно обращаться только к первому и последнему элементам. --------------------
Неродивый студент |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Ну Вы бы хоть поискали, в соседние темы заглянули, или ждете пока все разжуют вот к примеру совсем недалеко от вашей тема называется "Замена пробелов String.h " - http://forum.vingrad.ru/forum/topic-251394.html там есть и примеры работы с пробелами и чтение с файла, к примеру в этом посту http://forum.vingrad.ru/index.php?showtopi...t&p=1819041 нужное Вам находится в строках 16-17 (ну вот и искать теперь не надо также прочтите замечание насчет F и P. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Garcian,
Считывайте из файла как хотите, но изврат без применния индексов и указателей предлагаю такой:
Полный изврат, но ни указателей ни доступа к элементам строки не использовал. |
|||
|
||||
| Garcian |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
mes, ну а как же Anikmar, спасибо, попробую. --------------------
Неродивый студент |
||||
|
|||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
уххх подразобрался с чтением, спс mes, правда, каждый символ идет на отдельной строчке
--------------------
Неродивый студент |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Прикольная задача, мне понравилась.
Фантазии нашим преподам не занимать. |
|||
|
||||
| Garcian |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
mes,
Вот Это сообщение отредактировал(а) Garcian - 24.3.2009, 20:57 --------------------
Неродивый студент |
||||
|
|||||
| mes |
|
||||||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
это перевод на следующую строку, поэтому и вывод соответсвующий. можно выводить побуквенно, как сделали Вы
а можно вначале считать , а потом вывести.
и если переменная относится только к циклу, как переменная i (судя по имени) то инициализировать ее лучше внутри цикла
иначе можно снаружи, но тогда желательно дать смысловое имя, чтоб не случилось конфликтов между циклами.
или
* любая из 3х секций for может быть пустой или даже все например for(;;) Это сообщение отредактировал(а) mes - 24.3.2009, 21:11 |
||||||||||
|
|||||||||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Anikmar, все работает, спасибо.
Но все опять же проблема с чтением из файла... До этого много работ уже сделал с тем же чтением... Были правда некторые проблемы, связанные с Вистой, но с ней уже разобрался. Вот переделанный код Anikmarа
не читает --------------------
Неродивый студент |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
ну так именуется путь к папке администратора (т.е. меня), если использовать для хранения другие папки, то ничего не работает
--------------------
Неродивый студент |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
mes, лично у вас программа работает? (Я не говорю про путь файла)
--------------------
Неродивый студент |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
В общем я сойду с ума с этими ПО... Перенес программу на ноутбук - все работает!
Добавлено через 4 минуты и 36 секунд вот так всегда, ломаю голову, что не так, а тут такие пироги. Спасибо mes, Anikmar, за вашу помощь и нелегкий труд! --------------------
Неродивый студент |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Это мой код. Задача не использовать указатели. Нужно: создать строку из пробелов заданной длины. Сначала делаю строку заданной длины strncpy(Str2,Str1,Cur); Затем устанавливаю ее в пробелы strnset(Str2,' ',Cur); На самомо деле не бьюсь за оптимальность, потому, что ограничения препода иногда ставят в тупик. На вскидку придумал так. Работает. Можно сделать лучше, наверное, но мне показалось так лаконичнее. |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну так указатели все равно то используются ?! ограничения препода я честно говоря до конца так и не понял, но решусь предложить свой вариант
Это сообщение отредактировал(а) mes - 25.3.2009, 04:17 |
||||
|
|||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Ага. Я через Pos не обращаюсь к элементам строки, а использую только для вычисления позиции. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну тогда получается мой пример тоже соответствует условиям, так как указатели используются только для вычисления позиции, и передачи их в стандартные функции. обращение с их посредством к элементам отсутствует. Это сообщение отредактировал(а) mes - 25.3.2009, 10:57 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Я сначала пошел по вашему пути, но посчитал конструкцию вида p1=strchr(p++, ' ') нарушением условий заачи - так как ее можно расценить как доступ через указатель. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
не могу спорить, так как ограничения задачи для меня неясны, хотя доступ к элементу по указателю вне функции нет, а передавать позицию в функцию посредством указателя,имхо, не запрещено. Но у препода могут быть свои взгляды, в разборе которых, судя по одной из недавних тем, я не силен |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Вот и я засомневался, первый мой вариант был очень похож на ваш. Ладно, пусть ТС разбирается |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |