文档介绍:第四章串
void String_Reverse(Stringtype s,Stringtype &r)//求s的逆串r
{
  StrAssign(r,''); //初始化r为空串
  for(i=Strlen(s);i;i--)
  {
    StrAssign(c,SubString(s,i,1));
    StrAssign(r,Concat(r,c)); //把s的字符从后往前添加到r中
  }
}//String_Reverse
void String_Subtract(Stringtype s,Stringtype t,Stringtype &r)//求所有包含在串s中而t中没有的字符构成的新串r
{
  StrAssign(r,'');
  for(i=1;i<=Strlen(s);i++)
  {
    StrAssign(c,SubString(s,i,1));
    for(j=1;j<i&&pare(c,SubString(s,j,1));j++); //判断s的当前字符c是否第一次出现
    if(i==j)
    {
      for(k=1;k<=Strlen(t)&&pare(c,SubString(t,k,1));k++); //判断当前字符是否包含在t中
      if(k>Strlen(t)) StrAssign(r,Concat(r,c));
    }
  }//for
}//String_Subtract
int Replace(Stringtype &S,Stringtype T,Stringtype V);//将串S中所有子串T替换为V,并返回置换次数
{
  for(n=0,i=1;i<=Strlen(S)-Strlen(T)+1;i++) //注意i的取值范围
    if(!pare(SubString(S,i,Strlen(T)),T)) //找到了与T匹配的子串
    { //分别把T的前面和后面部分保存为head和tail
      StrAssign(head,SubString(S,1,i-1));
      StrAssign(tail,SubString(S,i+Strlen(T),Strlen(S)-i-Strlen(T)+1));
      StrAssign(S,Concat(head,V));
      StrAssign(S,Concat(S,tail)); //把head,V,tail连接为新串
      i+=Strlen(V); //当前指针跳到插入串以后
      n++;
    }//if
  return n;
}//Replace
分析:i+=Strlen(V);这一句是必需的,,则在某些情况下,会引起不希望的后果,:设S='place', T='ace', V='face',则省掉i+=Strlen(V);运行时会出现什么结果?
int Delete_SubString(Stringtype &s,Stringtype t)//从串s中删除所有与t相同的子串,并返回删除次数
{
  for(n=0,i=1;i<=Strlen(s)-Strlen(t)+1;i++)
    if(!pare(SubString(s,i,Strlen(t)),t))
    {
      StrAssign(head,SubString(S,1,i-1));
      StrAssign(tail,SubString(S,i+Strlen(t),Strlen(s)-i-Strlen(t)+1));
      StrAssign(S,Concat(head,tail)); //把head,tail连接为新串
      n++;
    }//if
  return n,
}//Delete_SubString
Status NiBoLan_to_BoLan(Stringtype str,Stringtype &new)//把前缀表达式str转换为后缀式new
{
  Initstack(s); //s的元素为Stringtype类型
  for(i=1;i<=Strlen(str);i++)
  {
   &#