求关于字符串的最好算法,要精品
求关于字符串的最好算法,要精品
楼主fangss()2002-05-14 15:01:10 在 PowerBuilder / 基础类 提问 现有一字符串以某特定字符分隔,以另一特定字符结束,如:
你好&你进步&他是好人吗&我的呀%%
&为分隔符,%%为结束符
想用一方法求此字符串第n和n-1分隔符之间的字符和有多少个分隔符
n=1 你好
n=2 你进步
n=3 他是好人吗
n=4 我的呀
结束符不要。
请以代码描述,谢谢参与 问题点数:50、回复次数:11Top
1 楼myclife(反方向的钟)回复于 2002-05-14 15:13:49 得分 25
/*=========================================================
Function: get_token
Commect:
Argument: p_string reference
p_seperator
Return: string
Log:
=========================================================*/
int vPos
string vsRet=""
vPos=pos(P_string,p_seperator)
if vPos >= 1 then
vsRet=left(p_string,vpos - 1)
P_string=right(p_string,Len(p_string) - vPos - Len(p_seperator)+1) //去掉分隔符
ELSE
vsRet=p_string
p_string=""
end if
return vsRet
用上面的函数来解决Top
2 楼gungod2000(work,work and work)回复于 2002-05-14 15:13:57 得分 20
//参数as_source(refence),as_separator(value)
int li_pos
string ls_ret
//Check parameters
If IsNull(as_source) or IsNull(as_separator) Then
string ls_null
SetNull(ls_null)
Return ls_null
End If
/////////////////////////////////////////////////////////////////////////////////
// Get the position of the separator
/////////////////////////////////////////////////////////////////////////////////
li_pos = Pos(as_source, as_separator)
/////////////////////////////////////////////////////////////////////////////////
// Compute the length of the token to be stripped off of the source string.
/////////////////////////////////////////////////////////////////////////////////
// If no separator, the token to be stripped is the entire source string
if li_pos = 0 then
ls_ret = as_source
as_source = ""
else
// Otherwise, return just the token and strip it & the separator from the source string
ls_ret = Mid(as_source, 1, li_pos - 1)
as_source = Right(as_source, Len(as_source) - (li_pos+Len(as_separator)-1) )
end if
return ls_retTop
3 楼fangss()回复于 2002-05-14 15:49:29 得分 0
多谢二位!Top
4 楼zhanwei(@_@,初学.Net)回复于 2002-05-14 15:50:34 得分 5
myclife(反方向的钟) 方法可行,注意处理汉字时的len()函数在pb8.0下有问题,需要处理一下,lenw()处理汉字时替代len()
Top
5 楼fangss()回复于 2002-05-14 16:01:04 得分 0
zhanwei(詹维):
确实有汉字的,不过我是7.0,我再确认一下,多谢!Top
6 楼fibbery(飞)(3.20VC++)回复于 2002-05-14 16:15:05 得分 0
///////////////////////////////////////////////
//参数: string as_source //
// string ref as_split=mid(as_source,li_start,li_end - li_start)
li_start=li_end+1
li_end=pos(as_source,"&",li_start)
if li_end=0 and li_start <> li_stop then
li_count++
as_split=mid(as_source,li_start,li_stop - li_start)
end if
loop
return li_countTop
7 楼fibbery(飞)(3.20VC++)回复于 2002-05-14 16:18:50 得分 0
sorry,我上面返回的是字符串数Top
8 楼ouyi2002(即查即用-摘星计划)回复于 2002-05-14 16:20:51 得分 0
简单
“你好&你进步”提取方法如下:
a用于取放"你好"也就是"&"前的内容
b用于取放"你进步"也就是"&"后的内容
string char_list,a,b
long len_num
char_list=“你好&你进步”
len_num=len(char_list)
a=Left(char_list,Pos(char_list, "&") - 1)
b=right(char_list,len_num - len(a)+1)
以此类推Top
9 楼fibbery(飞)(3.20VC++)回复于 2002-05-14 16:40:39 得分 0
修改后的:
///////////////////////////////
//参数:string as_source //
// string ref as_split=mid(as_source,li_start,li_end - li_start)
li_start=li_end+1
li_end=pos(as_source,"&",li_start)
loop
if li_end=0 and li_start <> li_stop then
li_count++
as_split=mid(as_source,li_start,li_stop - li_start)
end if
return li_count - 1Top
10 楼fibbery(飞)(3.20VC++)回复于 2002-05-14 16:45:58 得分 0
if 中的li_count++应该放在if 上面Top
11 楼fibbery(飞)(3.20VC++)回复于 2002-05-14 16:48:31 得分 0
no problemTop
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
