21 / 21 / 2
Регистрация: 14.10.2009
Сообщений: 202
1

Удаление из начала и конца строки незначащих символов

28.02.2010, 18:09. Показов 14008. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать функцию Split, которая будет с начала и конца строки удалять незначимые символы (пробелы, переводы строки, знаки табуляции и т.п.).

Вот моя наработка:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function Split(Str: String): String;
var
  I: Integer;
begin
  I := 1;
  while Str[1]= ' ' do  {удаляем пробелы в начале}
    Delete(Str, 1, 1);
  while I <= Length(Str) do begin
    if Str[I]= ' ' then
      while ((Str[I+1] = ' ') or (Length(Str) = I)) and (Length(Str) >= I) do
      {удаляем лишние пробелы между словами и в конце}
        Delete(Str, I, 1);
    Inc(I);
  end;
  Result := Str;
end;
Она удаляет пробелы в начале, в конце и между словами. Мне не понятно как можно удалить не только пробелы, но и символы табуляции и перевода строки. Если речь идет о переводе строки, то текст я думаю, вводить нужно в Memo. Но в том же Memo вообще не предусмотрена функция отступов с помощью Tab. К тому же в Мемо не одна строка, а массив строк. Подскажите как бы вы это реализовали.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2010, 18:09
Ответы с готовыми решениями:

Удаление из начала и конца строки незначащих символов [Qt]
В объекте QString нужно удалить все непечатные символы в начале и в конце. Подскажите, как это...

Удаление от начала / от конца строки
Ребята помогите решить вот такую задачу: В текстовом файле расположено много строк, все строки...

Удаление кавычек с начала и конца строки
Доброго времени суток! Подскажите пожалуйста по следующему вопросу. Функция Trim() удаляет...

Удаление символов с конца строки
Допустим есть строка : 213srdadRasRRRRRR , нужно удалить буквы &quot;R&quot; находящиеся в конце строки....

5
873 / 544 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
28.02.2010, 18:22 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 var
  InpStr:   string; //Копия входной строки
  InpPos:   integer;//Номер текущего символа
  CurrChar: char;   //Копия текущего символа
  b,c: Real;
 
{$R *.dfm}
//Процедура берёт следующий символ из строки
procedure GetNextChar;
begin
  if InpPos < length(InpStr) then begin
    Inc(InpPos);
    CurrChar := InpStr[InpPos];
  end
  else
    CurrChar := #0;
end;
 
//отсеивает ненужные символы
procedure SkipSpace;
begin
  while CurrChar in [' ', #9,#95] do
     GetNextChar;
end;
Добавлено через 3 минуты
Delphi
1
while CurrChar in [' ', #9,#95] do
В этой строке в квадратных скобках ставишь все ненужные символы, только этот код удаляет все ненужные символы из всей строки - можно подредактировать
1
Добрый самаритянин
1107 / 622 / 139
Регистрация: 31.03.2009
Сообщений: 2,567
28.02.2010, 18:48 3
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function Split(Str: String): String;
var
I: Integer;
begin
I := 1;
while Str[1] in [' ',',','.',#13] do {удаляем пробелы в начале}
Delete(Str, 1, 1);
while I <= Length(Str) do begin
if Str[I] in [' ',',','.',#13] then
while ((Str[I+1] in [' ',',','.',#13]) or (Length(Str) = I)) and (Length(Str) >= I) do
{удаляем лишние пробелы между словами и в конце}
Delete(Str, I, 1);
Inc(I);
end;
Result := Str;
end;
пробуй так с #13 неуверен
0
MKL_13
08.10.2010, 22:56 4
есть стандартная функция Trim(s: string): string, которая обрезает пробелы по краям, ну а с прочими символами придется ручками поработать.
13095 / 5876 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
08.10.2010, 23:44 5
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure TForm1.Button1Click(Sender: TObject);
const
  D = [' ', #9, #10, #13];
var
  S : String;
  i, P1, P2, Len : Integer;
begin
  S := Memo1.Text;
 
  Len := Length(S);
  P1 := 0;
  P2 := 0;
  //Позиция первого символа слева, который не является разделителем.
  for i := 1 to Len do begin
    if not (S[i] in D) then begin
      P1 := i;
      Break;
    end;
  end;
  //Позиция первого символа справа, который не является разделителем.
  for i := Len downto 1 do begin
    if not (S[i] in D) then begin
      P2 := i;
      Break;
    end;
  end;
  //Строка, взятая по найденным координатам P1, P2.
  S := Copy(S, P1, P2 - P1 + 1);
  
  Memo2.Text := S;
end;
0
Фрилансер
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
09.10.2010, 15:22 6
Цитата Сообщение от MKL_13 Посмотреть сообщение
есть стандартная функция Trim(s: string): string, которая обрезает пробелы по краям, ну а с прочими символами придется ручками поработать.
Стандартная функция Trim, а также TrimLeft и TrimRight удаляет не только пробелы, а и все управляющие символы, к которым относятся табуляция (#9), перевод строки (#10) и конец строки(#13)...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2010, 15:22
Помогаю со студенческими работами здесь

Цикличный просмотр символов в файле от начала до конца
Хочу циклом пробежать по всем символам в файле(txt)и вывести их на экран, при открытии файла через...

Символ начала/конца строки в строке
Прошу помочь в казалось бы тривиальном вопросе. Как вставить символ &quot; начала/конца строки в саму...

Удалить с начала и с конца строки заданный символ
программа удаляет из начала и из конца строки заданный символ c# Добавлено через 3 минуты Как...

Переписать в другой файл все строки, читающиеся одинаково с начала и с конца.
Дан текстовый файл. Переписать в другой файл все строки, читающиеся одинаково с начала и с конца. ...

Ввести строки и через n символов первой строки вставить вторую строку, и так до конца строки
Помогите исправить баг задача состоит в следующем :ввести строку и простроку тоесть две строки и...

Как правильно применить Trim для удаления пробелов с начала и конца строки
На форме имеется TextEdit туда могут попасть данные, хотелось бы чтобы не было пробелов до и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru