September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
46
Task/String-length/Simula/string-length-2.simula
Normal file
46
Task/String-length/Simula/string-length-2.simula
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
BEGIN
|
||||
|
||||
! NUMBER OF UFT8 CHARACTERS IN STRING ;
|
||||
INTEGER PROCEDURE UTF8STRLEN(S); TEXT S;
|
||||
BEGIN
|
||||
INTEGER R, LEN, BYTES, ALLBYTES;
|
||||
CHARACTER BYTE;
|
||||
WHILE S.MORE DO
|
||||
BEGIN
|
||||
BYTE := S.GETCHAR;
|
||||
ALLBYTES := ALLBYTES + 1;
|
||||
R := RANK(BYTE);
|
||||
LEN := LEN + 1;
|
||||
BYTES :=
|
||||
IF R >= 0 AND R <= 127 THEN 1 ELSE ! 0....... ASCII ;
|
||||
IF R >= 128 AND R <= 191 THEN 0 ELSE ! 10...... CONTINUATION ;
|
||||
IF R >= 192 AND R <= 223 THEN 2 ELSE ! 110..... 10x ;
|
||||
IF R >= 224 AND R <= 239 THEN 3 ELSE ! 1110.... 10x 10x ;
|
||||
IF R >= 240 AND R <= 247 THEN 4 ELSE ! 11110... 10x 10x 10x ;
|
||||
-1;
|
||||
IF BYTES = -1 THEN ERROR("ILLEGAL UTF8 STRING");
|
||||
WHILE BYTES > 1 DO
|
||||
BEGIN
|
||||
BYTE := S.GETCHAR;
|
||||
ALLBYTES := ALLBYTES + 1;
|
||||
BYTES := BYTES - 1;
|
||||
END;
|
||||
END;
|
||||
UTF8STRLEN := LEN;
|
||||
END UTF8STRLEN;
|
||||
|
||||
TEXT LINE;
|
||||
WHILE NOT LASTITEM DO
|
||||
BEGIN
|
||||
INTEGER L;
|
||||
LINE :- COPY(SYSIN.IMAGE).STRIP;
|
||||
OUTCHAR('"');
|
||||
OUTTEXT(LINE);
|
||||
OUTCHAR('"');
|
||||
L := UTF8STRLEN(LINE);
|
||||
OUTTEXT(" CHARACTER LENGTH = "); OUTINT(UTF8STRLEN(LINE), 0);
|
||||
OUTIMAGE;
|
||||
INIMAGE;
|
||||
END;
|
||||
|
||||
END.
|
||||
Loading…
Add table
Add a link
Reference in a new issue