|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.05.2009, 00:53 | #1 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
изменения строки
Строка длиной не более 1000 символов содержит полный путь к файлу в формате MS-DOS (возможно, с указанием имени диска): имя файла и каждого из промежуточных директориев не превосходит 8 символов, а необязательное расширение отделяется от имени точкой и имеет длину не более 3 символов. Если длина исходной строки больше N символов (N ≤ 1000), ее необходимо сократить до длины, не превосходящей N, по следующим правилам:
• несколько идущих подряд промежуточных директориев и разделяющие их символы ’\’ заменяются на три точки. Может быть выполнена только одна такая замена. Имя диска и директорий, следующий за корневым, не заменяются; • длина полученной строки должна быть максимальной; • из нескольких возможных решений, удовлетворяющих предыдущему требованию, необходимо выбрать то, при котором подстрока, расположенная после вставленных точек, имеет максимальную длину. Входные данные: На входе содержится две строки. В первой из них записано значение N, а вторая представляет собой исходный полный путь к файлу. Значение N достаточно велико, чтобы сформировать строку согласно указанным выше требованиям. Выходные данные Содержат единственную преобразованную строку (либо исходную строку, если преобразование не требуется). Пример Вход 30 e:\games\burut\goldenl.and\data\scr ipts\charctrs\npc\2.txt Выход e:\games\burut\...\npc\2.txt |
06.05.2009, 10:11 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Какой язык?
В принципе есть функция WINAPI GetShortPathName. Описание в Хелпе или MSDN
I'm learning to live...
|
06.05.2009, 14:37 | #3 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
язык - pascal
|
06.05.2009, 14:46 | #4 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
ну помогите пожалуйста очень надо
|
06.05.2009, 20:59 | #5 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
а по поводу решения - задачка несложная, но заковыристая... я бы рекомендовал, для начала, выделить из строки неубираемую часть (это "Имя диска и директорий, следующий за корневым, не заменяются;") это можно выделить найдя второй слеш от начала строки. пусть это будет s0 (для примера s0 : "e:\games\") дальше выделяем имя файла (это всё, что справа до первого слеша) пусть будет в sEnding (sEnding: "2.txt") дальше получаем строку из внутренних поддиректорий. "goldenl.and\data\scripts\charctrs\ npc\" и длину строки N_inner := N - Length(s0) - Length(sEnding); дальше суммируем подстроки ( от текущей и до очередного слеша) суммируем до тех пор, пока сумма не строго меньше N_inner потом цикл повторяем от следующей позиции (каждый раз в цикле провереяем полученную сумму, если она меньше, чем минимальная, то запоминаем полученную длину как минимальная и запоминаем позицию начала этой самой минимальной подстроки ) всё. задача решена. вывыдим S0 + строчка, из которой удалена обнаруженная минимальная подстрока + sEnding; p.s. в принципе, писал столько же, сколько это и програмировать |
|
06.05.2009, 21:29 | #6 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
сам делитант такое ни когда не видел??
while not eoln do read(c); где с-символ |
06.05.2009, 23:04 | #7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
|
|
06.05.2009, 23:18 | #8 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
Ты написал строка не может быть длинее 255 вот способ считывания символов до тех пор пока не нажмется ENTER
А идея хорошая только реализуй пожалуйста, а то я пытался бред получается |
07.05.2009, 00:34 | #9 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
1) я говорил совершенно про другое - ПОЛНОЕ ИМЯ ФАЙЛА НЕЛЬЗЯ ПОЛУЧИТЬ более 258 символов.
Создайте папку с именем 150 символов (например, 150 символов A "AAAA...AAA") войдите в эту папку и ещё раз создайте папку (или файл) с именем из 150 символов... Не получилось? так вот я именно про это. 2) теперь про тип данных String Если речь идёт о TurboPascal, то там строка НЕ МОЖЕТ БЫТЬ ДЛИНЕЕ 255 символов! цитирую из хелпа к TP: Цитата:
Кстати, в Pascal обойти подобное ограничение (в 255 символов) можно, например, так: Код:
и последнее, код в while Nor eoln read(c), в цикле считывающий по ОДНОМУ символу никакого отношения к строке не имеет... Удачи. |
|
07.05.2009, 15:07 | #10 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
дааа помоему между моим кодом и твоими словами
Кстати, в Pascal обойти подобное ограничение (в 255 символов) можно, например, так: Код: var MyStr : array[1..1000] of char; 3) код в цикле и последнее, код в while Nor eoln read(c), в цикле считывающий по ОДНОМУ символу никакого отношения к строке не имеет... разничы абсолютно нет ладно можеш написать программу??? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Изменения в настройках | Иллидан | Общие вопросы Delphi | 3 | 19.01.2008 23:50 |
Проверка изменения ячейки | boocephal | Microsoft Office Excel | 3 | 17.12.2007 16:02 |
оптимизация изменения данных | Lunatikus | БД в Delphi | 6 | 03.07.2007 11:47 |
Изменения алгоритма | delphi_beginner | Общие вопросы Delphi | 2 | 13.05.2007 21:27 |