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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
MODULE Ch1 EXPORTS Main;
IMPORT SIO,Text,TextConv,ASCII;
PROCEDURE Trim(READONLY Str:TEXT):TEXT =
VAR
Start:CARDINAL := 0;
Stop:CARDINAL := Text.Length(Str);
C:CHAR;
BEGIN
WHILE Start < Stop DO
C := Text.GetChar(Str,Start);
IF NOT C IN ASCII.Spaces THEN EXIT END;
INC(Start)
END;
WHILE Start < Stop DO
C := Text.GetChar(Str,Stop-1);
IF NOT C IN ASCII.Spaces THEN EXIT END;
DEC(Stop)
END;
RETURN Text.Sub(Str,Start,Stop-Start)
END Trim;
PROCEDURE LastWord(READONLY Str:TEXT):CARDINAL =
CONST
S = SET OF CHAR{' ', '\t', '\n', '\r', '\f'};
VAR
Trimmed := Trim(Str);
Len := TextConv.ExplodedSize(Trimmed,S);
A := NEW(REF ARRAY OF TEXT,Len);
BEGIN
TextConv.Explode(Trimmed,A^,S);
RETURN Text.Length(A[LAST(A^)])
END LastWord;
BEGIN
SIO.PutInt(LastWord("The Weekly Challenge")); SIO.Nl();
SIO.PutInt(LastWord(" Hello World ")); SIO.Nl();
SIO.PutInt(LastWord("Let's begin the fun")); SIO.Nl()
END Ch1.
|