tempad
Readygo技术搜索引擎 >>ASP技术 >> 求关于字符串的最好算法,要精品

求关于字符串的最好算法,要精品

Readygo技术搜索引擎 网络搜索 efish 2008-1-14 6:26:11

求关于字符串的最好算法,要精品

楼主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

责任编辑: efish 参与评论 查找更多:
相关文章
有关简单的类型转换? 有关简单的类型转换?
VC中的同步机制,欢迎参与讨论------来者有分! VC中的同步机制,欢迎参与讨论------来者有分!
ado+sql server为何这么慢? ado+sql server为何这么慢?
如何对SYBASE数据库做日常备份,十万火急 如何对SYBASE数据库做日常备份,十万火急
从SQL SERVER里读数据到ACCESS里,但有3万多条,速度… 从SQL SERVER里读数据到ACCESS里,但有3万多条,速度太慢,怎么解决??
用什么工具能改变应用程序的图标?? 用什么工具能改变应用程序的图标??
如何在用无线网卡的CE环境下,用程序直接连SQL Serv… 如何在用无线网卡的CE环境下,用程序直接连SQL Server数据库啊?
请教打开access窗体时的条件语句、 请教打开access窗体时的条件语句、
鱼龙混杂的垃圾论坛!!!!!!!! 鱼龙混杂的垃圾论坛!!!!!!!!
请教,在delphi中使用SQL Server数据库,程序执行时… 请教,在delphi中使用SQL Server数据库,程序执行时沙漏如何消除?
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎