作者在 2006-10-08 23:33:00 发布以下内容
* 回文 (C)Copyright 2006-2006 By Tiger5392
* 用法
* ?回文(cExpress)
* 参数
* cExpress: 字符型常量、变量、函数、表达式
* 返回值
* 一个数值
* 数值 含义
* 0 是一个空串
* 1 是一个字节回文,是两个字节回文
* 2 是一个字节回文,不是两个字节回文
* 3 不是一个字节回文,是两个字节回文
* 4 不是一个字节回文,不是两个字节回文
* 5 是英文和汉字的混合回文(也一定是包含双字节回文)
* 有关概念
* 一个字节回文:一个字符串,一个字节一个字节地正念与倒念都一样。
* 两个字节回文:一个字符串,两个字节两个字节地正念与倒念都一样。
* 混合回文;一个包含英文和汉字的字符串,英文单独一个字节地念、汉字单独两个字节地念,正念与倒念都一样。
* 双字节回文:一个全部由汉字组成的字符串,一个汉字一个汉字地念,正念与倒念都一样。
PARAMETERS cOldString
PRIVATE cOldString,cNewString1,cNewString2,cNewString3,nCnt,nFlags1,nFlags2,nFlags3
STORE [] TO cNewString1,cNewString2,cNewString3
*判断是否为一个空串
IF EMPTY(cOldString)
RETURN 0
ENDIF
*判断是否为一个字节回文
FOR nCnt=LEN(cOldString) TO 1 STEP -1
cNewString1=cNewString1+SUBSTR(cOldString,nCnt,1)
ENDFOR
nFlags1=IIF(cOldString=cNewString1,1,3)
*判断是否为两个字节回文
FOR nCnt=LEN(cOldString) TO 1 STEP -2
cNewString2=cNewString2+SUBSTR(cOldString,nCnt-1,2)
ENDFOR
nFlags2=IIF(cOldString=cNewString2,0,1)
*判断是否为混合回文
FOR nCnt=1 TO LEN(cOldString)
IF ISLEADBYTE(SUBSTR(cOldString,nCnt))
cNewString3=SUBSTR(cOldString,nCnt,2)+cNewString3
nCnt=nCnt+1
ELSE
cNewString3=SUBSTR(cOldString,nCnt,1)+cNewString3
ENDIF
ENDFOR
nFlags3=IIF(cOldString=cNewString3,1,0)
RETURN IIF(nFlags3=0,nFlags1+nFlags2,5)
* 用法
* ?回文(cExpress)
* 参数
* cExpress: 字符型常量、变量、函数、表达式
* 返回值
* 一个数值
* 数值 含义
* 0 是一个空串
* 1 是一个字节回文,是两个字节回文
* 2 是一个字节回文,不是两个字节回文
* 3 不是一个字节回文,是两个字节回文
* 4 不是一个字节回文,不是两个字节回文
* 5 是英文和汉字的混合回文(也一定是包含双字节回文)
* 有关概念
* 一个字节回文:一个字符串,一个字节一个字节地正念与倒念都一样。
* 两个字节回文:一个字符串,两个字节两个字节地正念与倒念都一样。
* 混合回文;一个包含英文和汉字的字符串,英文单独一个字节地念、汉字单独两个字节地念,正念与倒念都一样。
* 双字节回文:一个全部由汉字组成的字符串,一个汉字一个汉字地念,正念与倒念都一样。
PARAMETERS cOldString
PRIVATE cOldString,cNewString1,cNewString2,cNewString3,nCnt,nFlags1,nFlags2,nFlags3
STORE [] TO cNewString1,cNewString2,cNewString3
*判断是否为一个空串
IF EMPTY(cOldString)
RETURN 0
ENDIF
*判断是否为一个字节回文
FOR nCnt=LEN(cOldString) TO 1 STEP -1
cNewString1=cNewString1+SUBSTR(cOldString,nCnt,1)
ENDFOR
nFlags1=IIF(cOldString=cNewString1,1,3)
*判断是否为两个字节回文
FOR nCnt=LEN(cOldString) TO 1 STEP -2
cNewString2=cNewString2+SUBSTR(cOldString,nCnt-1,2)
ENDFOR
nFlags2=IIF(cOldString=cNewString2,0,1)
*判断是否为混合回文
FOR nCnt=1 TO LEN(cOldString)
IF ISLEADBYTE(SUBSTR(cOldString,nCnt))
cNewString3=SUBSTR(cOldString,nCnt,2)+cNewString3
nCnt=nCnt+1
ELSE
cNewString3=SUBSTR(cOldString,nCnt,1)+cNewString3
ENDIF
ENDFOR
nFlags3=IIF(cOldString=cNewString3,1,0)
RETURN IIF(nFlags3=0,nFlags1+nFlags2,5)