Update all new Tasks
This commit is contained in:
parent
00a190b0a6
commit
91df62d461
5697 changed files with 93386 additions and 804 deletions
42
Task/String-matching/XPL0/string-matching.xpl0
Normal file
42
Task/String-matching/XPL0/string-matching.xpl0
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
include c:\cxpl\codes; \intrinsic 'code' declarations
|
||||
string 0; \use zero-terminated strings
|
||||
|
||||
func StrLen(A); \Return number of characters in a string
|
||||
char A;
|
||||
int I;
|
||||
for I:= 0 to -1>>1-1 do
|
||||
if A(I) = 0 then return I;
|
||||
|
||||
func StrFind(A, B); \Search for string B in string A
|
||||
\Returns index of first occurrence of string B in A, or -1 if B is not found
|
||||
char A, B; \strings to be compared
|
||||
int LA, LB, I, J;
|
||||
[LA:= StrLen(A);
|
||||
LB:= StrLen(B);
|
||||
for I:= 0 to LA-LB do
|
||||
[for J:= 0 to LB-1 do
|
||||
if B(J) # A(J+I) then J:= LB+1;
|
||||
if J = LB then return I; \found
|
||||
];
|
||||
return -1;
|
||||
];
|
||||
|
||||
char Str; int I, J;
|
||||
[Str:= "pack my box with";
|
||||
\ 0123456789012345
|
||||
Text(0, if StrFind(Str, "pack") = 0 then "yes" else "no"); CrLf(0); \1.
|
||||
Text(0, if StrFind(Str, "ack") = 0 then "yes" else "no"); CrLf(0);
|
||||
I:= StrFind(Str, "x w");
|
||||
Text(0, if I >= 0 then "yes" else "no"); \2.
|
||||
Text(0, ", at offset "); IntOut(0, I); CrLf(0);
|
||||
I:= 0; J:= 0; \offsets of space characters
|
||||
loop [I:= StrFind(Str+J, " ");
|
||||
if I < 0 then quit;
|
||||
IntOut(0, I+J); ChOut(0, ^ );
|
||||
J:= J+I+1;
|
||||
];
|
||||
CrLf(0);
|
||||
Text(0, if StrFind(Str, "X w") >= 0 then "yes" else "no"); CrLf(0);
|
||||
Text(0, if StrFind(Str, "with") = StrLen(Str)-StrLen("with") then "yes" else "no"); CrLf(0); \3.
|
||||
Text(0, if StrFind(Str, "x w" ) = StrLen(Str)-StrLen("x w" ) then "yes" else "no"); CrLf(0);
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue