Count occurrences of a substring: Difference between revisions
Content added Content deleted
(Change lang id) |
Not a robot (talk | contribs) (Add PL/M) |
||
Line 2,186: | Line 2,186: | ||
7 |
7 |
||
</pre> |
</pre> |
||
=={{header|PL/M}}== |
|||
<lang plm>100H: |
|||
/* CP/M CALLS */ |
|||
BDOS: PROCEDURE (FN, ARG); DECLARE FN BYTE, ARG ADDRESS; GO TO 5; END BDOS; |
|||
EXIT: PROCEDURE; CALL BDOS(0, 0); END EXIT; |
|||
PRINT: PROCEDURE (S); DECLARE S ADDRESS; CALL BDOS(9, S); END PRINT; |
|||
/* PRINT A NUMBER */ |
|||
PRINT$NUMBER: PROCEDURE (N); |
|||
DECLARE S (8) BYTE INITIAL ('.....',13,10,'$'); |
|||
DECLARE (P, N) ADDRESS, C BASED P BYTE; |
|||
P = .S(5); |
|||
DIGIT: |
|||
P = P - 1; |
|||
C = N MOD 10 + '0'; |
|||
N = N / 10; |
|||
IF N > 0 THEN GO TO DIGIT; |
|||
CALL PRINT(P); |
|||
END PRINT$NUMBER; |
|||
/* COUNT OCCURRENCES OF SUBSTRING IN STRING */ |
|||
COUNT$SUBSTRING: PROCEDURE (STR, MATCH) ADDRESS; |
|||
DECLARE (STR, MATCH) ADDRESS, C BASED STR BYTE; |
|||
DECLARE (SP, MP) ADDRESS, (SC BASED SP, MC BASED MP) BYTE; |
|||
DECLARE COUNT ADDRESS; |
|||
COUNT = 0; |
|||
DO WHILE C <> '$'; |
|||
SP = STR; |
|||
MP = MATCH; |
|||
DO WHILE SC = MC; |
|||
SP = SP + 1; |
|||
MP = MP + 1; |
|||
END; |
|||
IF MC = '$' THEN DO; |
|||
STR = SP; |
|||
COUNT = COUNT + 1; |
|||
END; |
|||
ELSE DO; |
|||
STR = STR + 1; |
|||
END; |
|||
END; |
|||
RETURN COUNT; |
|||
END COUNT$SUBSTRING; |
|||
CALL PRINT$NUMBER(COUNT$SUBSTRING(.'THE THREE TRUTHS$', .'TH$')); /* PRINTS 3 */ |
|||
CALL PRINT$NUMBER(COUNT$SUBSTRING(.'ABABABABAB$', .'ABAB$')); /* PRINTS 2 */ |
|||
CALL PRINT$NUMBER(COUNT$SUBSTRING(.'CAT$', .'DOG$')); /* PRINTS 0 */ |
|||
CALL EXIT; |
|||
EOF</lang> |
|||
{{out}} |
|||
<pre>3 |
|||
2 |
|||
0</pre> |
|||
=={{header|PowerBASIC}}== |
=={{header|PowerBASIC}}== |