1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 17
|
||||||
1 | ||||||
Вывести слова строки в порядке убывания числа букв в них25.10.2013, 18:50. Показов 2495. Ответов 5
Метки нет (Все метки)
Собственно, имеется готовая на половину программа:
Помогите пожалуйста. Добавлено через 1 час 17 минут Что ж так пусто то тут? Добавлено через 34 минуты Забыл сказать, что при запуске программы после работы с первой частью программы, верно выводится приглашение на ввод строки, после чего сразу заключительная фраза и программа завершается
0
|
25.10.2013, 18:50 | |
Ответы с готовыми решениями:
5
Строки. Вывести слова в порядке убывания количества цифр в них Cлова строки расположить в порядке убывания в них букв Слова строки расположены в порядке возрастания в них букв Вывести слова строки в порядке убывания длины |
27 / 27 / 6
Регистрация: 27.09.2009
Сообщений: 101
|
|
25.10.2013, 20:06 | 2 |
Я бы читал строку с помощью gets, так как вроде scanf считает до первого разделителя(пробел тоже разделитель). И у вас в 77 строке цикл до k, но там ведь вы по логике должны пробегать по всей строке(ища координаты пробелов), а получается только по найденному количеству пробелов, что не соответствует длине строки. Так же надо учитывать, что можно ввести несколько пробелов и учитывать,что после последнего слова будет пробел ну и т.д.
1
|
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 17
|
|||||||||||||||||||||
25.10.2013, 21:16 [ТС] | 3 | ||||||||||||||||||||
[QUOTE=Vivo;5236273]Я бы читал строку с помощью gets, так как вроде scanf считает до первого разделителя(пробел тоже разделитель)
если интересно, то я раскопал, что это можно делать и с помощью scanf в таком виде:
Добавлено через 31 минуту
Необработанное исключение в "0x008c1c07" в "лаб1.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdfac6c5". Честно говоря понятия не имею, с чем это может быть связано, похоже на нехорошее разыменование указателей, только как с этим бороться, я не знаю
0
|
27 / 27 / 6
Регистрация: 27.09.2009
Сообщений: 101
|
|||||||||||
28.10.2013, 15:25 | 4 | ||||||||||
Я про это знал, просто у меня в VS 2010 это не срабатывает, поэтому и не посоветовал.
Если у вам нужно выполнить это задание на c++,то можно вот так:
Ну а по поводу вашего кода: Посмотрев в отладчике ваш новый код, я не понял как вы не нашли проблемы с вашим алгоритмом, попробуйте поставить много точек останова и посмотреть значения массивов. Приведу часть проблем: Пример: Берем строку: 333 1 22. k у нас будет равна 3-м и мы выделяем память под 3-и элемента. Далее вы ищите координаты пробелов и записываете в массив, НО вы не учли тот факт, что пробелов в данной строке 2, а k равна 3-м т.к. вы инициализировали его единицей. В результате этого упущения у вас в массиве wrds адекватные значения только у нулевого и первого элементов. После этого вы создаете массив структур и заполняете первый и последний элементы значениями, НО из-за некорректности последнего элемента в массиве wrds получается, что в этом месте будут не те значения(строки 89-92):
1
|
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 17
|
||||||
28.10.2013, 21:55 [ТС] | 5 | |||||
при отладке gets_s(st) работает неадекватно, а именно не дает шанса ввести строку. Вот теперь я точно понятия не имею что же, черт возьми, происходит
0
|
27 / 27 / 6
Регистрация: 27.09.2009
Сообщений: 101
|
||||||
29.10.2013, 15:14 | 6 | |||||
К сожалению мой отладчик опять показывает не понятные для меня данные.
Может код вы и изменили, но в массивах осталось всё так же: В случае с 3-мя словами. Вы заполняете массив wrds двумя элементами(координаты пробелов), допустим тут всё нормально, дальше вы заполняете arw[0] и arw[k-1]. И теперь смотрим дальше: вы сортируете массив из 3-х элементов, но данные в arw[2] снова b и l не корректные, вы отсортировали и выводите. Но при выводе опять выход за диапазон получается. Может я что-то не так делаю, но ваш вариант у меня не работает. Попробуйте пока отложить ввод строки, а отладить алгоритм. Сделайте так:
Мне кажется, что вам лучше заполнять массив arw значениями индексов слов, а не высчитывать через индексы пробелов.
1
|
29.10.2013, 15:14 | |
29.10.2013, 15:14 | |
Помогаю со студенческими работами здесь
6
Вывести все слова строки в порядке убывания Вывести на экран слова в порядке возрастания количества букв в них Вывести все слова строки в порядке убывания их длин Дано предложение. Расположить слова в порядке возрастания числа букв в них Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |