![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#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 |
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Какой язык?
В принципе есть функция WINAPI GetShortPathName. Описание в Хелпе или MSDN
I'm learning to live...
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
![]()
язык - pascal
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
![]()
ну помогите пожалуйста очень надо
|
![]() |
![]() |
![]() |
#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. в принципе, писал столько же, сколько это и програмировать ![]() |
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
![]()
сам делитант такое ни когда не видел??
while not eoln do read(c); где с-символ |
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 28.03.2009
Сообщений: 28
|
![]()
Ты написал строка не может быть длинее 255 вот способ считывания символов до тех пор пока не нажмется ENTER
А идея хорошая только реализуй пожалуйста, а то я пытался бред получается |
![]() |
![]() |
![]() |
#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), в цикле считывающий по ОДНОМУ символу никакого отношения к строке не имеет... Удачи. |
|
![]() |
![]() |
![]() |
#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 |