Gennady
Гений
(60210)
9 лет назад
Ну, во-первых, с какого вы свойству Text присваиваете значение MyStr (кстати, пустое) , а не наоборот?
А во-вторых, зачем такие сложности?
MyStr := MyStr + ' '; // чтобы не потерять последнее слово
while Pos(' ', MyStr) > 0 do begin
tmpS := Copy(MyStr, 1, Pos(' ', MyStr) - 1); // копируем слово без пробела
if (Length(tmpS) <=4) and (tmpS <> '') then Inc(Count); // подсчитываем слова, удовлетворяющие условию
Delete(MyStr, 1, Pos(' ', MyStr)); // удаляем обработанное члово
end;
Удалять обработанное слово из строки нужно потому, что функция Pos() возвращает позицию ПЕРВОГО вхождения подстроки в строку.
Подсчитать количество слов, длина которых не превышает 4-х букв. вот что у меня получилось, много гуглила, вроде так должно быть, но в итогк выдает 0.Что не так?
nit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Label1: TLabel; procedure Work(); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; MyStr:string; i,count:integer;implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);beginWork();end;
procedure TForm1.Work;beginEdit1.Text:=MyStr;i:=1;count:=0;while pos('',MyStr)>0 do beginif pos('',MyStr)-i<6 thencount:=count+1;i:=pos('',MyStr);MyStr[i]:='0';if i > Length(Mystr)-5 thencount:=count+1;end; label1.Caption:=IntToStr(count);end;end.