17 / 17 / 1
Регистрация: 19.10.2009
Сообщений: 93
|
|
1 | |
Линейный список, выравнивание текста по центру08.01.2011, 09:29. Показов 6126. Ответов 28
Метки нет (Все метки)
Доброго времени суток. Задача- написать программу реализующую выравнивание текста по центру. ширина строки, имя входного и выходного файлов задаются пользователем с командной строки. Слова, которые превышают по длине заданную ширину строки, должны переносится на следующую строку. абзацы отделяются пустрй строкой. вроде все.
Так вот вопрос, как мне это реализовать? я не могу придумать алгоритм, что за чем делать. Прошу помощи Добавлено через 13 минут И какой список лучше использовать: односвязный или двусвязный
0
|
08.01.2011, 09:29 | |
Ответы с готовыми решениями:
28
HTML!? Выравнивание IMG после текста по центру этого текста Выравнивание текста по центру Выравнивание текста по центру Выравнивание текста по центру |
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
08.01.2011, 09:31 | 2 |
Эээ... А это два разных вопроса или один? Потому как связные списки и выравнивание текста у вас ну никак между собой не вяжутся, даже в вопросе, не то что в логике...
0
|
17 / 17 / 1
Регистрация: 19.10.2009
Сообщений: 93
|
|
08.01.2011, 09:34 [ТС] | 3 |
мой косяк. в задание ещё нужно добавить. "Перемещение слов производится целиком. Для хранения в памяти строк файла использовать линейный список." Вотъ
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
08.01.2011, 09:35 | 4 |
Я бы юзал двусвязный, хотя может вполне хватить и односвязного.
0
|
17 / 17 / 1
Регистрация: 19.10.2009
Сообщений: 93
|
|
08.01.2011, 09:37 [ТС] | 5 |
а что нибудь по алгоритму сказать можете? я пытался что-то писать, но у меня ничего не получилось=(
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
08.01.2011, 09:41 | 6 |
Ну а что, в принципе ничего сложного. Первым делом, считаем длину одной строки (не всего введённого текста, а одной его строки, до знака переноса строки). Если она короче ширины строки - просто добавляем перед первым и после последнего слова одинаковое число пробелов, пока длина получаемой строки не станет равна ширине строки. Если же длина этой строки больше ширины строки, идём назад по словам, пока не встретим слово, на котором длина от начала строки до конца этого слова не станет меньше ширины, разбиваем строку на две, одна из которых оканчивается найденным словом, а вторая начинается следующим после него, и к этим двум строкам применяем уже описанный алгоритм выравнивания по центру.
1
|
17 / 17 / 1
Регистрация: 19.10.2009
Сообщений: 93
|
|
08.01.2011, 09:47 [ТС] | 7 |
допустим длина строки больше ширины. строка разделена на две. одна записана, вторая записана. куда мне писать строку, которую я считываю из файла следующей? на новую строку? + мне нужно делать частичный перенос слов=(
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
08.01.2011, 10:07 | 8 |
Гамбит, а вы считывайте весь файл целиком. У вас будет список, скажем так, лексем, где лексема - это слово или конец строки. Тогда текст
Код
Пример выравнивания текста по центру. Код
[Пример]->[выравнивания]->[текста]->[по]->[центру.]->[\0] Добавлено через 2 минуты Ну или если очень хочется, можно и построчно читать. Тогда да, следующую строку, разумеется, писать в файл на новую строку. Про частичный перенос слов (если имеется ввиду по слогам) в задании не увидел, только про полный перенос.
0
|
17 / 17 / 1
Регистрация: 19.10.2009
Сообщений: 93
|
||||||
08.01.2011, 14:09 [ТС] | 9 | |||||
спасибо=) попытаюсь=)
Добавлено через 2 часа 54 минуты
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
08.01.2011, 14:14 | 10 |
В 28 строку после if уберите точку с запятой.
0
|
17 / 17 / 1
Регистрация: 19.10.2009
Сообщений: 93
|
|
08.01.2011, 14:20 [ТС] | 11 |
который раз попадаюсь....но все равно не правильно. он не видит следующие строки. выдает кол-во строк 1 и общее кол-во символов.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
08.01.2011, 14:23 | 12 |
В 26 строку уберите & - имя массива является указателем на его начало.
К тому же, перевод строки будет склеен с последним слово в этой строке, т.е. так Код
[последнее_слово.\n]
0
|
17 / 17 / 1
Регистрация: 19.10.2009
Сообщений: 93
|
|
08.01.2011, 14:46 [ТС] | 13 |
Про & я знаю, это не критично.
Код
fscanf(f,"%s",p->word); k=strlen(p->word); if(p->word[k-1]=="\n") ну и то что начение параметра k не используется=( Добавлено через 16 минут и ещё не правильно считается длина строки=( текст из 2 строк с кол-вом символов 149. он показывает 1 строку в которой 131 символ=( (хотя он же наверно пробелы игнорирует)
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
08.01.2011, 14:46 | 14 |
Гамбит, вы символ со строкой сравниваете. Пишите '\n', а не "\n"
0
|
17 / 17 / 1
Регистрация: 19.10.2009
Сообщений: 93
|
|
08.01.2011, 14:55 [ТС] | 15 |
это я понял уже=)
if(p->word[k-1]=='\n') при условии, что к длина слова. все равно 1 строку находит=(
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
08.01.2011, 16:19 | 16 | |||||
Балин, что-то быдлокодерски вышло. Но работает. Это только чтение и распихивание по списку слов.
0
|
17 / 17 / 1
Регистрация: 19.10.2009
Сообщений: 93
|
|
08.01.2011, 16:53 [ТС] | 17 |
о мой моцк....сама функция считывания и распихивания у меня работает. у меня не работает подсчет строк и длин строк
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
08.01.2011, 17:02 | 18 |
Гамбит, потому что у вас это самое "считывание и распихивание" неверно реализовано. У вас всё интерпретируется как одна строка, поскольку в файле нету разделения на строки. Поэтому приходится считывать посимвольно. Чем и занимается изрядная часть моей функции. Остальная часть - по сути то же, что и у вас. В мой код добавить подсчёт строк труда не составит.
0
|
17 / 17 / 1
Регистрация: 19.10.2009
Сообщений: 93
|
|
08.01.2011, 17:54 [ТС] | 19 |
слишком много кода=( мне это в жизн не объяснить преподу
тоесть нужно посимвольно считывать? просто в задании написано, что Перемещение строк производится целиком...
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
08.01.2011, 18:03 | 20 |
Гамбит, ну и что? Перемещение - целиком. А обрабатывать-то их как-то надо. Вот и обрабатываем, как можем, а чтобы удовлетворять заданию, т.е. вообще разбить набор входных символов на строки - приходится читать посимвольно.
1
|
08.01.2011, 18:03 | |
08.01.2011, 18:03 | |
Помогаю со студенческими работами здесь
20
Выравнивание текста по центру экрана Выравнивание текста по центру MessageBox ListBox выравнивание текста по центру Выравнивание текста по центру, Word Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |