8 / 8 / 0
Регистрация: 16.06.2018
Сообщений: 22
|
||||||
1 | ||||||
Поменять местами слова максимальной и минимальной длины в строке27.09.2018, 16:47. Показов 10513. Ответов 10
Задание:
Дана строка. Подсчитать количество символов в каждом слове. Сформировать новую строку, в которой слова с максимальной и минимальной длиной поменять местами. Удалить из строки все символы, не являющиеся буквами. Строка вводится с клавиатуры. Вот наработки:
Допустим, я нашел min и max слова, но как их поменять местами, используя string, а не char-ский массив - не знаю. Использовать char не хочу. Следующая часть задания: " Удалить из строки все символы, не являющиеся буквами." - допустим, я знаю как проверить символы, являются ли они буквами или нет, используя isalpha(c), но как их удалить я не знаю. Все делается в консоли на C++, если что).
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
27.09.2018, 16:47 | |
Ответы с готовыми решениями:
10
Определить в предложении слова максимальной и минимальной длины и поменять их местами. C Поменять местами слово максимальной и минимальной длины.
В файле заменить все слова максимальной длины на слова минимальной длины |
8 / 8 / 0
Регистрация: 16.06.2018
Сообщений: 22
|
||||||
03.10.2018, 02:38 [ТС] | 2 | |||||
Как поменять местами слова максимальной и минимальной длины в строке до сих пор не знаю.
Доделанная работа (кроме указанного выше):
0
|
7422 / 5017 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
|
|||||||||||
03.10.2018, 14:58 | 3 | ||||||||||
MysteriousLord, то что можно сделать двумя строками как-то сложно происходит в Вашем коде. например
зачем цикл for (h; h <= 1; h++) я не смог разобраться. многие строки лишние мне кажется из-за неверного восприятия условия задачи. если по условию дана строка и в ней нужно работать со словами эти слова должны быть чем-то отделены друг от друга (например пробелом или пробелами или знаком ',' или ';' или чередованием этих знаков) с этим Вы справились, но лучше, т.е. более наглядно выводить слова и количество символов. конечно можно найти все слова с max и min длинами (это несложно) - но тогда возникает вопрос в каком порядке их менять - что на что ? в условии это не указано, поэтому считаем что речь идёт о работе со строкой с одним max и одним min сформируйте строковый динамический массив string Words[count_words] и забросьте в него все слова - дальше думаю разберётесь - судя по всему у Вас всё должно получиться делаем цикл
вместо ...................... напишите что посчитаете нужным описание функции erase http://www.cplusplus.com/refer... ing/erase/ для основы кода можете использовать:
если считаете что знаков ' ' ',' ';' недостаточно (я бы удалял только их в такой задаче) используйте if ( !isalpha(str[i]) ) // если текущий символ строки не буква Добавлено через 7 минут ...
0
|
8 / 8 / 0
Регистрация: 16.06.2018
Сообщений: 22
|
|
03.10.2018, 17:10 [ТС] | 4 |
Этот цикл нужен для того, чтобы определить начальные значения переменных, иначе после прохода главного цикла, эти переменные так и останутся нулями (min = 0, дальше по условию он сравнивается с length - min > length, т.е. 0 > length, т.е. условие не будет выполняться вообще)
Как бы у меня так и выводит. Сначало слово, потом количество символов в нём. Минимальное (min длина) и максимальное (max длина) слова могут существовать только в единичном экземпляре), все последующие с такими же длинами не учитывать, т.е. до первых min и max слов. Я новом коде уже сделал это. P.S.: Мне преподаватель сказал, что лучше делать не в потоке, а посимвольно все делать или найти подходящие функции для потока. Посимвольно, т.е. делать подсчёт символов в каждом слове, находить min и max слова и запоминать индексы их первых и последних символов. Потом посимвольно выводить строку: сначала выводить до начала min/max слова, потом само min/max слово, потом все остальное до max/min слова, и потом собственно само max/min слово и все, что осталось. Поэтому я уже начал переделывать все, только у меня некорректно считывает начальный и конечный символ min слова, если оно стоит первым в строке, а количество его символов нормально, также само слово не может считать в потоке. Также мне пришлось добавить пробел в конец строки, чтобы считалось последнее слово, но из-за этого у меня теперь не все символы, не являющиеся буквами, удаляет, что очень странно, алгоритм нормальный, рабочий. P.P.S.: Новый код скину позже, он на ноуте, а я с компа пишу.
0
|
7422 / 5017 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
|
||||||
03.10.2018, 20:45 | 5 | |||||
![]() Решение
Этот цикл не нужен (см. предложенный код)
согласен (сказанное относилось к первому варианту) такие вещи лучше сообщать сразу сделали но неправильно. так не будет удалять подряд идущие. сомневаюсь что это лучше лучше так, тем более что Вы уже всё нашли. зачем переделывать ? Вы не поняли как реализовать предложенный алгоритм ? count_words (если его переместить на пару строк ниже) - это и будет индекс для массива. т.е. индекс первого max и первого min запоминаете прямо в первом цикле, потом просто меняете элементы массива местами и выводите на экран. Добавлено через 19 минут
строка 22 - информационная (по условию не нужна). если будете её убирать, уберите заодно нахождение max_word=word; в строке 18 и min_word=word; в строке 19
1
|
8 / 8 / 0
Регистрация: 16.06.2018
Сообщений: 22
|
|
04.10.2018, 14:55 [ТС] | 6 |
Это конечно же хорошо, но он не удаляет символы. Я по разному писал условие, все равно не удаляет. Я и на буквы проверял, и на цифры, и делал даже char-ий массив со всеми символами, и по отдельности каждый символ писал - всё равно не удаляет.
А за остальное спасибо, все работает (кроме удаления).
0
|
7422 / 5017 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
|
|
04.10.2018, 16:21 | 7 |
так удаления там и нет, я Вам предлагал его самостоятельно добавить:
если не получается, напишите из какой строки нужно удалять (первоначальной или полученной) и что именно нужно удалять.
0
|
8 / 8 / 0
Регистрация: 16.06.2018
Сообщений: 22
|
|
04.10.2018, 18:21 [ТС] | 8 |
А как же это?
Удалять из преобразованной (последней), т.е. задание по порядку делать, там про удаление идёт в конце.
0
|
7422 / 5017 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
|
||||||
04.10.2018, 20:21 | 9 | |||||
вопрос не понятен. я дал Вам блок, чтобы Вы его добавили самостоятельно. если не получается, добавляю я.
требуется чтобы слова исходной строки разделялись пробелом.
1
|
8 / 8 / 0
Регистрация: 16.06.2018
Сообщений: 22
|
||||||
05.10.2018, 04:15 [ТС] | 10 | |||||
Спасибо огромное), всё заработало.
P.S.: Если кому пригодится, то вот окончательный код программы:
0
|
7422 / 5017 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
|
|
05.10.2018, 13:38 | 11 |
MysteriousLord, уберите строки 27-37, по условию:
это происходит в строке 46 комментарий строки 53 относится к строке 51. комментарий строки 62 крайне неудачен (это не требуется для удаления). это формирование новой строки. чтобы были слова они должны быть чем-то разделены, каким-то символом. чаще всего это пробел. посмотрите как обычно формулируются подобные задачи например здесь: Посчитать количество слов содержащих определённые буквы если такое условие подходит, добавьте точку в конце предложения при формировании новой строки (после цикла) строки 55-56 можно заменить одной (см.выше) комментарий 85 точнее: освобождение памяти уменьшите количество библиотек (хедеров). зачем применять аналогичные библиотеки С и С++ ? функция isalpha не работает для русских букв, какие есть варианты, посмотрите здесь: Какой есть аналог isalpha для работы с русским алфавитом?
0
|
05.10.2018, 13:38 | |
Помогаю со студенческими работами здесь
11
В заданном списке слов поменять местами слова с максимальной и минимальной длинами Поменять местами подстроки минимальной и максимальной длины Поменять местами слова с максимальной и минимальной длиной Поменять местами слова с максимальной и минимальной длиной при условии, что такие слова единственные Напишите программу, которая во введенном предложении меняет местами слова минимальной и максимальной длины.
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |