Chinaunix

标题: 怎样判断一个中英文数字混合的字符串里面ascii码的数量? [打印本页]

作者: ipvip    时间: 2004-02-04 11:14
标题: 怎样判断一个中英文数字混合的字符串里面ascii码的数量?
比如 “一as二34三.,四\\[p5五”
里面 ascii字符的个数
作者: ccwlm741212    时间: 2004-02-04 11:52
比较苯的方法是把ascii码作为一个数组或表,后一个一个与之判断后得到数量
作者: xzh2000    时间: 2004-02-04 13:58
declare @s varchar(30), @i int, @num int, @s1 varchar(9)
select @s =\'一as二34三.,四\\[p5五\'
select @i =1,@num = 0
while @i <= len(@s)
begin
        select @s1 =left(@s,1),@s =substring(@s, 2, len(@s))
        --select @s1,@s
        if ascii(@s1) < 128
        begin
                select @num = @num + 1
        end
     select @i = @i + 1
end
select @num
作者: xzh2000    时间: 2004-02-04 14:02
sorry,


declare @s varchar(30), @i int, @num int, @s1 varchar(9)
select @s =\'一as二34三.,四\\[p5五\'
select @i =datalength(@s),@num = 0
while @i > 0
begin
        select @s1 =left(@s,1),@s =substring(@s, 2, len(@s))
        if ascii(@s1) < 128
        begin
                select @num = @num + 1
        end
     select @i = datalength(@s)
end
select @num
作者: magicangel    时间: 2004-02-04 17:13
--大方向没什么问题,考虑到字符串里有?和尾随空格,我在谢兄的基础上做了一下小改动。
declare @s varchar(30), @i int, @num int, @s1 varchar(9)
select @s =\'一as二34三.,四\\?[p5?  五  \'
select @i =datalength(@s),@num = 0
while @i > 0
begin
select @s1 =left(@s,1),@s =substring(@s, 2, datalength[/COLOR](@s))
if ascii(@s1) <=[/COLOR] 128
begin
select @num = @num + 1
end
select @i = datalength(@s)
end
select @num
作者: ipvip    时间: 2004-02-04 18:21
看的我有点 糊涂  汉字2个字节高位都是1,我这样是否可以?
declare @s varchar(30), @i int, @num int, @s1 varchar(9)
select @s =\'一as二34三.,四\\?[p5? 五 \'
select @i =datalength(@s),@num = 0
while @i > 0
begin
select @s1 =substring(@s, @i ,1)
if ascii(@s1) <128
begin
select @num = @num + 1
end
select @i = @i-1
end
select @num
作者: xzh2000    时间: 2004-02-04 19:44
最初由 ipvip 发布
[B]看的我有点 糊涂  汉字2个字节高位都是1,我这样是否可以?
declare @s varchar(30), @i int, @num int, @s1 varchar(9)
select @s =\'一as二34三.,四\\?[p5? 五 \'
select @i =datalength(@s),@num = 0
while @i > 0
begin
select @s1 =substring(@s, @i ,1)
if ascii(@s1) <128
begin
select @num = @num + 1
end
select @i = @i-1
end
select @num [/B]


select @s1 =substring(@s, @i ,1)
偶試過﹐不行的。
作者: magicangel    时间: 2004-02-05 14:38
最初由 xzh2000 发布
[B]

select @s1 =substring(@s, @i ,1)
偶試過﹐不行的。 [/B]


他用select @i = @i-1来控制步长逐位判断,当substring取@i=0时返回的@s1会是空值或零,那么就退出了while @i > 0循环。
作者: Odds&amp;En    时间: 2004-02-12 15:48
declare @s varchar(30),
        @i int,
        @j int,
        @num int,
        @s1 varchar(119),
        @s2 varchar(10)
set @s =\'一as二34ssh,三四\'
select @i =1,@num = 0
set @j=len(@s)
while @i <= @j
begin
        select @s1 =left(@s,1)
        set @s = right(@s,len(@s)-1)
        if ascii(@s1) < 128
        begin
        set @num = @num + 1
        end
        select @i = @i + 1
end
print @num
作者: enhydraboy    时间: 2004-02-13 14:52
贴一篇,我的研究。给大家拓宽一点思路。
http://www.csdn.net/develop/read_article.asp?id=19765
作者: xzh2000    时间: 2004-02-16 17:00
最初由 enhydraboy 发布
[B]贴一篇,我的研究。给大家拓宽一点思路。
http://www.csdn.net/develop/read_article.asp?id=19765 [/B]


謝謝﹐以后有什么研究能否直接貼到PUB來﹖:rose:




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2