Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2009, 12:01   #1
GULINA
Новичок
Джуниор
 
Регистрация: 23.05.2009
Сообщений: 1
По умолчанию Аналог функции Trim-удаление лишних пробелов в начале и в конце передаваемой строки

Работа со строками.Написать аналог функции Trim-удаление лишних пробелов в начале и в конце передаваемой строки.
GULINA вне форума Ответить с цитированием
Старый 23.05.2009, 12:05   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
Function Trimmer(s:string):string;
begin
 while s[1]=' ' do Delete(s,1,1);
 while s[length(s)=' ' Delete(s.1,1);
end;
должно работать
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.05.2009, 12:33   #3
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

А если пробелов больше в начале и конце больше 1, то можно примено так:
Код:
var
  str: string;
  i: Integer;
begin
  str:='         строка без пробелов в начале и конце   ';
  i:=0;
  repeat
  if str[i]= ' ' then
  begin
    str:=copy(str, (i+1)+1,length(str)-(i+1));
 
  end;
  i:=i+1;
  until str[i]<>' ';

   i:=length(str)-1;

  repeat
    if str[i]= ' ' then
    begin
      str:=copy(str,length(str)-i,i-1);
 
    end;
  i:=i-1;
  until str[i]<>' ';

//  Memo1.Text:=str;

end;
Не самый оптимальный вариант, но зато рабочий.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 23.05.2009, 12:48   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от ArtInt Посмотреть сообщение
А если пробелов больше в начале и конце больше 1
ты хочешь сказать что то что я написал удаляет только по одному символу?!!!?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.05.2009, 13:22   #5
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Сказать честно, когда смотрел код показалось, что там вместо while стоит if. Это наверное потому что там по моему опечатки есть (do отсутствует например).
Вот как исправил код
Код:
 while s[1]=' ' do
 Delete(s,1,1);

 while s[length(s)]=' ' do
 Delete(s,length(s),1);
В последней строчке вместо 1 наверное все таки length(s) должно быть, а так по логике все правильно.
Но странно, почему то когда оформляю как функцию не работает или выводит ошибку? А так без функции все работает, пока не понял с чем это связано, может Дельфи глючит.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 23.05.2009, 13:29   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ArtInt, да немного упустил, спасибо за то что тыкнул

вот исправил все:
Код:
Function Trimmer(s:string):string;
begin
 while s[1]=' ' do Delete(s,1,1);
 while s[length(s)]=' ' do Delete(s,length(s),1);
 Result:=s;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.05.2009, 15:07   #7
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Вот, измените имя функции и всё:
Код:
function Trim(const S: string): string;
var
  I, L: Integer;
begin
  L := Length(S);
  I := 1;
  while (I <= L) and (S[I] <= ' ') do Inc(I);
  if I > L then Result := '' else
  begin
    while S[L] <= ' ' do Dec(L);
    Result := Copy(S, I, L - I + 1);
  end;
end;
Подсказка: Ctrl + Левая_Кнопка_Мыши
Alter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать RichMemo c графическими указателями в начале строки? besserebrenik Общие вопросы Delphi 5 23.11.2009 18:04
Удаление пробелов Иван 883 Помощь студентам 1 20.04.2009 22:23
Удаление лишних пробелов. Ввод/вывод в файл. Иван 883 Помощь студентам 13 31.03.2009 19:39
удаление лишних данных в ячейке mistx Microsoft Office Excel 2 24.02.2009 18:32
Строки(удаление пробелов). C language SuccEssoR Помощь студентам 4 15.01.2009 17:13