免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6591 | 回复: 10
打印 上一主题 下一主题

怎样判断一个中英文数字混合的字符串里面ascii码的数量? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-02-04 11:14 |只看该作者 |倒序浏览
比如 “一as二34三.,四\\[p5五”
里面 ascii字符的个数

论坛徽章:
0
2 [报告]
发表于 2004-02-04 11:52 |只看该作者
比较苯的方法是把ascii码作为一个数组或表,后一个一个与之判断后得到数量

论坛徽章:
0
3 [报告]
发表于 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

论坛徽章:
0
4 [报告]
发表于 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

论坛徽章:
0
5 [报告]
发表于 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

论坛徽章:
0
6 [报告]
发表于 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

论坛徽章:
0
7 [报告]
发表于 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)
偶試過﹐不行的。

论坛徽章:
0
8 [报告]
发表于 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循环。

论坛徽章:
0
9 [报告]
发表于 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

论坛徽章:
0
10 [报告]
发表于 2004-02-13 14:52 |只看该作者
贴一篇,我的研究。给大家拓宽一点思路。
http://www.csdn.net/develop/read_article.asp?id=19765
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP