描述:字符串可能是文本格式,也有可能是二进制格式,要求实现一个判断字符串格式的方法。
输入为源字符串,如果是文本格式则返回True,如果是二进制格式则返回False。
Perl: 1、空字符串按照文本格式处理
2、如果字符串含有空字符(‘\0’),则认为是二进制格式
3、超过30%的字符串高位时1(ascii大于126)或其它奇怪字符,则认为是二进制格式
辅助:文本的合法字符为ascii码从32到126的字符,加上'\n','\r','\t','\b'
另外,自测时候,可以用chr(ascii码)内建函数来模拟一个二进制字符
from __future__ import division
import string
from string import maketrans
class Demo:
def isText(self,s):
if not s:
return True
all_count = len(s)
text_count = 0
#print 'The Length of %s is %d' % (s,all_count)
for i in range(0,all_count):
value = ord(s[i])
if(0==value):
return False
#print "%s convert It's ASCII is %d" % (s[i],value)
if(value>=32 and value<=126) or (value==8 or value==9 or value==10 or value==13):
text_count+=1
#print '%d -----> %d'%(value,text_count)
#print 'text_count=%d count=%d'%(text_count,all_count)
percent = text_count/all_count
#print 'The text percert is %d',percent
if(percent>=0.7):
return True
else:
return False
def createStr(self,start,end):
s = ''
for i in range(start,end+1):
s+=chr(i)
#print s
return s
A = Demo()
print "\"\" is a Text ? ==> ",A.isText("")
print "abcdefg is a Text ? ==> ",A.isText("abcdefg")
print "abcdefg\0 is a Text ? ==> ",A.isText("abcdegf\0")
print "Special is a Text ? ==> ",A.isText("\n\n\0\n\n\0\n\n\n\0")
print "Special is a Text ? ==> ",A.isText("\r\n\t\b")
pStr = A.createStr(12,30)
print "createStr(12,30) is a Text ? ==> ",A.isText(pStr)
pStr = A.createStr(25,45)
print "createStr(25,45) is a Text ? ==> ",A.isText(pStr)