用VFP判断字符串是否为回文(2)

作者在 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)
VFP程序 | 阅读 5448 次
文章评论,共0条
游客请输入验证码
浏览116595次