split string
чем можно разбить строку на слова?
var s : ansistring;
m : array of ansistring;
procedure ....
m := s
return количество слов
split string
Модератор: Модераторы
- bw
- постоялец
- Сообщения: 359
- Зарегистрирован: 01.12.2005 10:36:23
- Откуда: Усть-Илимск
- Контактная информация:
Когда я вел речь о том есть ли нормальная либа в FP для работы со строками я говорил и о такой функции. Например в Python это делается так:
А как так же просто этого добиться на FP я не знаю
.
..bw
Код: Выделить всё
list_of_words = 'слово1 слово2 и т.д.'.split(' ')
assert list_of_words[0] == 'слово1'
assert list_of_words[1] == 'слово2'
assert list_of_words[2] == 'и'
assert list_of_words[3] == 'т.д.'
А как так же просто этого добиться на FP я не знаю
..bw
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
Код: Выделить всё
type
TStringArray = array of string;
function Explode(Ch: Char; const Text: string): TStringArray;
var
i, k, Len: Integer;
Count: Integer;
begin
if Text = '' then
begin
Result := nil;
Exit;
end; // if
Count := 0;
Len := Length(Text);
for i := 1 to Len do
begin
if Text[i] = Ch then Inc(Count);
end; // for i
SetLength(Result, Count + 1);
Count := 0;
k := 1;
for i := 1 to Len do
begin
if Text[i] = Ch then
begin
Result[Count] := Copy(Text, k, i - k);
Inc(Count);
k := i + 1;
end; // if
end;
Result[Count] := Copy(Text, k, Len - k + 1);
end;
Думаю, можно обойтись и средствами самого FPC. В юните StrUtils есть функции
Первая возвращает количество слов, разделенных заданным разделителем (или разделителями), в строке. А вторая возвращает слово по его номеру и разделителям.
Код: Выделить всё
function WordCount(const S: string; const WordDelims: TSysCharSet): Integer;
function ExtractWord(N: Integer; const S: string; const WordDelims: TSysCharSet): string;inline;
Первая возвращает количество слов, разделенных заданным разделителем (или разделителями), в строке. А вторая возвращает слово по его номеру и разделителям.
