52 lines
841 B
Text
52 lines
841 B
Text
PROC ReversePart(CHAR ARRAY src,dst BYTE start,len)
|
|
BYTE i
|
|
|
|
FOR i=0 TO len-1
|
|
DO
|
|
dst(start+len-i-1)=src(start+i)
|
|
OD
|
|
RETURN
|
|
|
|
PROC ReverseString(CHAR ARRAY src,dst)
|
|
BYTE i
|
|
|
|
dst(0)=src(0)
|
|
ReversePart(src,dst,1,src(0))
|
|
RETURN
|
|
|
|
PROC ReverseInWords(CHAR ARRAY src,dst)
|
|
BYTE i,start
|
|
|
|
dst(0)=src(0)
|
|
i=1
|
|
WHILE i<=src(0)
|
|
DO
|
|
IF src(i)=32 THEN
|
|
dst(i)=32 i==+1
|
|
ELSE
|
|
start=i
|
|
WHILE i<=src(0) AND src(i)#32
|
|
DO i==+1 OD
|
|
ReversePart(src,dst,start,i-start)
|
|
FI
|
|
OD
|
|
RETURN
|
|
|
|
PROC ReverseWords(CHAR ARRAY src,dst)
|
|
CHAR ARRAY tmp(100)
|
|
|
|
ReverseString(src,tmp)
|
|
ReverseInWords(tmp,dst)
|
|
RETURN
|
|
|
|
PROC Main()
|
|
CHAR ARRAY s="rosetta code phrase reversal",rev(100)
|
|
|
|
PrintE(s)
|
|
ReverseString(s,rev)
|
|
PrintE(rev)
|
|
ReverseInWords(s,rev)
|
|
PrintE(rev)
|
|
ReverseWords(s,rev)
|
|
PrintE(rev)
|
|
RETURN
|