一个字符串,要求分别统计其中 中文、英文字母,空格,数字字符、和 其他字符个数, 并显示它们。
---------------------------------------------------------------
方法一:
ABC1="adfd1成B2{1,d功.fds f*5/7!&7中"
StrIdentify(ABC1)
FUNCTION StrIdentify
LPARAMETERS lcString
LOCAL lc中文,ln中文个数,lc英文,ln英文个数,lc空格,ln空格个数,lc数字,ln数字个数,lc其他字符,ln其他字符个数
STORE '' TO lc中文,lc英文,lc空格,lc数字,lc其他字符
STORE 0 TO ln中文个数,ln英文个数,ln空格个数,ln数字个数,ln其他字符个数
FOR I=1 TO LEN(lcString)
IF ISLEADBYTE(SUBSTR(lcString,I,1)) &&中文(中文及中文符号是双字节)
lc中文=lc中文+SUBSTR(lcString,I,2)
I=I+1
ln中文个数=ln中文个数+1
LOOP
ELSE
DO CASE
CASE UPPER(SUBSTR(lcString,I,1))$'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
lc英文=lc英文+SUBSTR(lcString,I,1)
ln英文个数=ln英文个数+1
CASE SUBSTR(lcString,I,1)=SPACE(1)
lc空格=lc空格+SUBSTR(lcString,I,1)
ln空格个数=ln空格个数+1
CASE SUBSTR(lcString,I,1)$'1234567890'
lc数字=lc数字+SUBSTR(lcString,I,1)
ln数字个数=ln数字个数+1
OTHERWISE
lc其他字符=lc其他字符+SUBSTR(lcString,I,1)
ln其他字符个数=ln其他字符个数+1
ENDCASE
ENDIF
ENDFOR
?'中文(含中文符号):'+ALLTRIM(STR(ln中文个数))+'个。是:"'+lc中文+'"'
?' 英文字母:'+ALLTRIM(STR(ln英文个数))+'个。是:"'+lc英文+'"'
?' 空格:'+ALLTRIM(STR(ln空格个数))+'个。是:"'+lc空格+'"'
?' 数字:'+ALLTRIM(STR(ln数字个数))+'个。是:"'+lc数字+'"'
?' 其他字符:'+ALLTRIM(STR(ln其他字符个数))+'个。是:"'+lc其他字符+'"'
ENDFUNC
-----------------------------------------------
方法二:
LOCAL aresult(5,2)
*Input '请输入字符串' To ctxt
ctxt='1324rka见证sj万d12 fklaj?adfj成长 a ;l d skj人flkqjdf中国'
cc_num(ctxt,@aresult)
? ' 中文个数:"'+aresult(1,1)+'",共'+ALLTRIM(STR(aresult(1,2)))+'个',
? ' 英文个数:"'+aresult(2,1)+'",共'+ALLTRIM(STR(aresult(2,2)))+'个',
? ' 空格个数:"'+aresult(3,1)+'",共'+ALLTRIM(STR(aresult(3,2)))+'个',
? ' 数字个数:"'+aresult(4,1)+'",共'+ALLTRIM(STR(aresult(4,2)))+'个',
? '其它字符个数:"'+aresult(5,1)+'",共'+ALLTRIM(STR(aresult(5,2)))+'个'
RETURN
FUNCTION cc_num
LPARAMETERS ctxt,aso
ntxtlen=LEN(ctxt)
FOR i=1 TO 5
aso(i,1)=""
aso(i,2)=0
ENDFOR
FOR i=1 TO ntxtlen
onechar=SUBSTR(ctxt,i,1)
DO CASE
CASE (onechar>='A' AND onechar<='Z') OR ( onechar>='a' AND onechar<='z')
aso(2,1) = aso(2,1) + onechar
aso(2,2) = aso(2,2) + 1
CASE onechar>='0' AND onechar<='9'
aso(4,1) = aso(4,1) + onechar
aso(4,2) = aso(4,2) + 1
CASE ASC(onechar)==32
aso(3,1) = aso(3,1) + onechar
aso(3,2) = aso(3,2) + 1
CASE ASC(onechar)>=160
IF i
1<ntxtlen &&可以取下一个字符="" asc(substr(ctxt,i+1,1))="" if="">=160
2aso(1,1) = aso(1,1) + SUBSTR(ctxt,i,2) &&取二个字节
3aso(1,2) = aso(1,2) + 1
4i=i+1 &&因为取了二个字节
5ENDIF
6ENDIF
7OTHERWISE
8aso(5,1) = aso(5,1) + onechar
9aso(5,2) = aso(5,2) + 1
10ENDCASE
11ENDFOR
12RETURN
13ENDFUNC</ntxtlen>