Другие языки программирования и технологии

как подсчитать количество слов в строке разделённым больше чем одним пробелом(Delphi)

всем привет!поставлена такая вот задачка, надо найти слова, которые разделены только пробелами, но количество пробелов не оговарено заранее, тоесть как 1 пробелом так и большем количеством...как сделать через один пробел, я написал, а вот с многими я не понимаю как, кто знает помогите....вот как я на один пробел сделал, всё работает:[code] procedure TForm1.BitBtn5Click(Sender: TObject); //ñêîëüêî ñëîâvar i,j,a:integer;begina:=1; for i:=0 to tekst.lines.count do begin //ñòðîêè for j:= 1 to length(tekst.Lines) do begin //ñèìâîëû if tekst.lines[j] = ' ' then begin a:=a+1; end; end; end;label4.Caption:=IntToStr(a);end;[/code]заранее спасибо)
Ivan Balandin
Ivan Balandin
57
Доброго времени суток.

Можно воспользоваться модулем StrUtils из библиотекой RxLib, в который входит функция WordCount. А вот и ее реализация.

function WordCount(const S: string; const WordDelims: TCharSet): Integer;
var
SLen, I: Cardinal;
begin
Result := 0;
I := 1;
SLen := Length(S);
while I <= SLen do begin
while (I <= SLen) and (S[ I ] in WordDelims) do Inc(I);
if I <= SLen then Inc(Result);
while (I <= SLen) and not(S[ I ] in WordDelims) do Inc(I);
end;
end;

Здесь тип TCharSet объявлен так

type
{$IFNDEF RX_D4}
TSysCharSet = set of Char;
{$ENDIF}
TCharSet = TSysCharSet;

Параметром WordDelims задается множество символов разделителей.

Удачи!
Сергей Эйхо
Сергей Эйхо
59 613
Лучший ответ
алгоритм прост.
Ты считаешь пробелы, а надо смотреть текущий символ (пробел) и следующий за ним (НЕ пробел) .
Да! учти что в начале сроки могут быть, а могут и не быть пробелы. Эту ситуацию обрабатываем по отдельно.
Самое верное (мой способ) — это сделать процедуру, которая приводит строку в божеский вид (удаляет пробелы в начале, в конце, заменяет несколько пробелов на один) , а потом привести в исполнение твою подпрограмму.
Первые две задачи простые.

Третья.
Просто ищешь два пробела и заменяешь на один.

flag:=false;
repeat
i:=pos(s,' '); //два пробела
if i>0 then delete(s,i,1)
else flag:=true;
until flag;
М)
Максим )))
1 253

Похожие вопросы