关于字符串长度的问题!

winner530 2004-10-22 05:53:24
如何判断一个字符串的长度;

例如:
一个字符串“你好,朋友!我是winner530”,在这个字符串共有多长,当然我要求一个双字节的(中文)为两位,而一个单字节的(英文、数字等字符)为一位,这样计算!
现在这个字符串长度我要的结果应该为:27(其中双字节的8个共16位+前后空格2位,单字节的9个共9位)
其中由于“你好,朋友!我是”这几个字需要在整个字符块左右加上空格,这个字符串的实际应该计算的内容是“ 你好,朋友!我是 ”这样,共有18位,

例如字符串是“=中=国=人=”,那按照要求得到的字符串长度应该是14,这个字符串的实际计算内容应该是“= 中 = 国 = 人 =”!

再例如字符串是“*专家=门诊”的话,那按照要求得到的字符串长度应该是14,这个字符串的实际计算内容应该是“* 专家 = 门诊 ”!

请问,想得到这样字符串长度的VB代码该怎么写?
有源代码提供的并能按要求正确得到这个字符串长度的,立刻给分!
在线等待!
...全文
788 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
winner530 2004-10-25
  • 打赏
  • 举报
回复
对,我写错了!

我正在测试“baoaya(点头)”的源代码,如果成功立刻给分!
northwolves 2004-10-22
  • 打赏
  • 举报
回复
照楼主的规则,“=中=国=人=”长度为16。
行云边 2004-10-22
  • 打赏
  • 举报
回复
不知道楼主 这个行不行 行的话给小弟点分 呵呵
Option Explicit

Private Sub Command1_Click()
Dim str1 As String, str2 As String, str3 As String
str1 = "你好,朋友!我是winner530"
str2 = "=中=国=人="
str3 = "*专家=门诊"
MsgBox MyLen(str1)
MsgBox MyLen(str2)
MsgBox MyLen(str3)
End Sub

Public Function MyLen(strValue As String) As Long
Dim bIsCHN As Boolean, lngLen As Long, lngRet As Long, i As Long, strChar As String * 1
lngLen = Len(strValue)
For i = 1 To lngLen
strChar = Mid(strValue, i, 1)
If AscW(strChar) > 255 Or AscW(strChar) < 0 Then '大于255为unicode
If bIsCHN And (i < lngLen) Then '最后一个如果是中文 也要加3
lngRet = lngRet + 2
Else
lngRet = lngRet + 3 '左边空格 为1,2+1=3
bIsCHN = True
End If
Else
If bIsCHN Then
lngRet = lngRet + 2 '右边的空格 ,1+1=2
bIsCHN = False
Else
lngRet = lngRet + 1
End If
End If
Next
MyLen = lngRet
End Function
zhhot 2004-10-22
  • 打赏
  • 举报
回复

“= 中 = 国 = 人 =”长度不是14吧

如果能实现逐个字符读取,那问题就好解决拉


gb2000 2004-10-22
  • 打赏
  • 举报
回复
“=中=国=人=”长度是不是该为16
gb2000 2004-10-22
  • 打赏
  • 举报
回复
Dim lngI As Long
Dim lngLen As Long
Dim lngTotalLen As Long
Dim strInText As String
Dim blnLast As Boolean

strInText = "*专家=门诊"

lngLen = Len(strInText)

For lngI = 1 To lngLen
lngTotalLen = lngTotalLen + 1
If Asc(Mid$(strInText, lngI, 1)) < 0 Then
If Not blnLast Then lngTotalLen = lngTotalLen + 1
blnLast = True
lngTotalLen = lngTotalLen + 1
ElseIf blnLast Then
lngTotalLen = lngTotalLen + 1
blnLast = False
End If
Next

If blnLast Then lngTotalLen = lngTotalLen + 1

MsgBox lngTotalLen
winner530 2004-10-22
  • 打赏
  • 举报
回复
可以根据要求得到我想要的长度值吗?
请有条件的朋友先将你们的源代码测试一下,只要按要求,将我提出的上面三个例子在同一段代码中均能运行计算成功的并和我给的要求长度一致的话,小弟立刻结贴!
tztz520 2004-10-22
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim xx As Long
xx = GetStrLength("你好,朋友!我是winner530")
MsgBox Str(xx)
End Sub


Private Function GetStrLength(StrTxt As String) As Long '
Dim N As Long, C As Long
Dim I As Integer
Dim mys As Integer

C = Asc(Mid(StrTxt, 1, 1))
If C >= 0 And C < 128 Then
N = 1
mys = 1
Else
N = 3
mys = 2
End If

For I = 2 To Len(StrTxt)
C = Asc(Mid(StrTxt, I, 1)) '
If C >= 0 And C < 128 Then '
N = N + 1
If mys = 2 Then N = N + 1
mys = 1
Else '
N = N + 2
If mys = 1 Then
N = N + 1
mys = 2
End If
End If
Next

C = Asc(Mid(StrTxt, Len(StrTxt), 1))
If C >= 0 And C < 128 Then
GetStrLength = N
Else
GetStrLength = N + 1
End If
End Function
LuBingLin 2004-10-22
  • 打赏
  • 举报
回复
用这个API函数即可。


Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long

intLen=lstrlen("字符串")
winner530 2004-10-22
  • 打赏
  • 举报
回复
tztz520(午夜逛街) ,你说的意思差不多了!

但还是少一点,不管是一个汉字还是多个汉字连接在一起的,都要多算两个长度才行。
Abyss-Xu 2004-10-22
  • 打赏
  • 举报
回复
---- VB里的字符串是以Unicode编码存储的,每个字符,不论中文还是西文,都占一个“Unicode字符”的宽度,即两个字节的宽度。具体来说,英文字符以是其ASCII值作为低字节,0作为高字节;而中文字符则是从GB2312编码转换到Unicode里相应的值。Len()函数计算的是字符串的“字符”数,而不是“字节”数。

---- 如果您想得到字节数,可以用LenB()函数。或者先用StrConv()转换成ASCII字符串,再计算其长度。
winner530 2004-10-22
  • 打赏
  • 举报
回复
是要看汉字在整个字符串中是否是一个 字符块,要将汉字当作一个 字符块 来处理!

不管是一个汉字还是多个汉字都是一个 字符块 ,来计算长度!

我并不是非要在字符串中加空格,而是要得到整个字符串的长度!
winner530 2004-10-22
  • 打赏
  • 举报
回复
除了第一种字符串外,还要求别的字符串,例如第二种、第三种请各位将问题看明白了,在写代码,谢谢!
tztz520 2004-10-22
  • 打赏
  • 举报
回复
楼主的要求是不是: 有汉字就加一个空格,连续的汉字也是加一个空格.这样来算的?
aohan 2004-10-22
  • 打赏
  • 举报
回复
验证的结果正确
wada0880 2004-10-22
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
dim var as string
var = "你好,朋友!我是winner530"
var = " " & var & " "
MsgBox LenB(StrConv(var, vbFromUnicode))
End Sub
winner530 2004-10-22
  • 打赏
  • 举报
回复
怎么没有人回答吗?
winner530 2004-10-22
  • 打赏
  • 举报
回复
这个命令能得到我想要的结果吗?
请将我的要求看完整,然后给我个正确答案!

我会立刻给分!
tztz520 2004-10-22
  • 打赏
  • 举报
回复
Dim N As Long
dim s as string
s="你好,朋友!我是winner530"
N = LenB(StrConv(s, vbFromUnicode))

msgbox n

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧