12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- program project1;
- {$mode objfpc}{$H+}
- {$apptype console}
- uses
- Classes;
- type
- { TStringEnumerator }
- TStringEnumerator = class // reverse enumerator
- private
- FString: String;
- FIndex: Integer;
- function GetCurrent: Char; inline;
- public
- constructor Create(AString: String);
- function MoveNext: Boolean;
- property Current: Char read GetCurrent;
- end;
- { TStringEnumerator }
- function TStringEnumerator.GetCurrent: Char;
- begin
- Result := FString[FIndex];
- end;
- constructor TStringEnumerator.Create(AString: String);
- begin
- inherited Create;
- FString := AString;
- FIndex := Length(FString) + 1;
- end;
- function TStringEnumerator.MoveNext: Boolean;
- begin
- dec(FIndex);
- Result := FIndex > 0;
- end;
- // define an operator for the string type
- operator enumerator (const s: string): TStringEnumerator;inline;
- begin
- Result := TStringEnumerator.Create(s);
- end;
- procedure LoopString(s: string);
- function getstring(s: string): string;
- begin
- result:=s;
- end;
- var
- c: char;
- begin
- // check loop in string. output is 'tset' for the string 'test' :)
- for c in getstring(s) do
- write(c);
- WriteLn;
- end;
- procedure LoopClass;
- var
- L: TStringList;
- S: String;
- begin
- L := TStringList.Create;
- L.Add('1');
- L.Add('2');
- L.Add('3');
- for S in L do
- WriteLn(S);
- L.Free;
- end;
- begin
- LoopString('test');
- LoopClass;
- end.
|