Как правильно разбить строку на слова в delphi?

Пользователь

от krista , в категории: Другие , 2 года назад

Как правильно разбить строку на слова в delphi?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от margaret , 2 года назад

@krista 

В Delphi есть несколько способов разбить строку на слова. Ниже приведены некоторые из них:

  1. Использование функции ExtractStrings из модуля Classes:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
var
  MyString: string;
  MyWords: TStringList;
begin
  MyString := 'Это строка, которую нужно разбить на слова.';
  MyWords := TStringList.Create;
  try
    ExtractStrings([' '], [], PChar(MyString), MyWords);
    // Обработка слов в списке MyWords
  finally
    MyWords.Free;
  end;
end;


  1. Использование функции SplitString из модуля System.StrUtils (требуется Delphi версии XE3 и выше):
1
2
3
4
5
6
7
8
var
  MyString: string;
  MyWords: TArray<string>;
begin
  MyString := 'Это строка, которую нужно разбить на слова.';
  MyWords := SplitString(MyString, ' ');
  // Обработка слов в массиве MyWords
end;


  1. Использование функции AnsiPos для поиска пробелов и последующее извлечение слов с помощью функции Copy:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
var
  MyString: string;
  SpacePos: Integer;
  Word: string;
begin
  MyString := 'Это строка, которую нужно разбить на слова.';
  repeat
    SpacePos := AnsiPos(' ', MyString);
    if SpacePos > 0 then
    begin
      Word := Copy(MyString, 1, SpacePos - 1);
      Delete(MyString, 1, SpacePos);
    end
    else
    begin
      Word := MyString;
      MyString := '';
    end;
    // Обработка слова Word
  until MyString = '';
end;


Каждый из этих подходов имеет свои преимущества и недостатки, поэтому выбор зависит от конкретной задачи и ситуации.

Пользователь

от mona_terry , год назад

@krista 

Выбор метода для разбиения строки на слова в Delphi зависит от специфики задачи и требований к производительности. Вот несколько распространенных способов:

  1. Использование функции SplitString из модуля System.StrUtils:
1
2
3
4
5
6
7
8
var
  MyString: string;
  MyWords: TArray<string>;
begin
  MyString := 'Это строка, которую нужно разбить на слова.';
  MyWords := SplitString(MyString, ' ');
  // Обработка слов в массиве MyWords
end;


  1. Использование функции TStringList.DelimitedText:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
var
  MyString: string;
  MyWords: TStringList;
begin
  MyString := 'Это строка, которую нужно разбить на слова.';
  MyWords := TStringList.Create;
  try
    MyWords.DelimitedText := MyString;
    // Обработка слов в списке MyWords
  finally
    MyWords.Free;
  end;
end;


  1. Использование функции TStrings.DelimitedText:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
var
  MyString: string;
  MyWords: TStrings;
begin
  MyString := 'Это строка, которую нужно разбить на слова.';
  MyWords := TStringList.Create;
  try
    MyWords.Text := MyString;
    // Обработка слов в списке MyWords
  finally
    MyWords.Free;
  end;
end;


  1. Использование функций Pos и Copy для поиска и извлечения отдельных слов:
 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
var
  MyString: string;
  SpacePos, WordStart, WordEnd: Integer;
  Word: string;
begin
  MyString := 'Это строка, которую нужно разбить на слова.';
  SpacePos := 1;
  while SpacePos > 0 do
  begin
    SpacePos := Pos(' ', MyString);
    if SpacePos > 0 then
    begin
      WordStart := 1;
      WordEnd := SpacePos - 1;
    end
    else
    begin
      WordStart := 1;
      WordEnd := Length(MyString);
    end;
    Word := Copy(MyString, WordStart, WordEnd - WordStart + 1);
    Delete(MyString, 1, SpacePos);
    // Обработка слова Word
  end;
end;


Каждый из этих методов имеет свои преимущества и недостатки, поэтому выбор зависит от конкретной ситуации.