zoukankan      html  css  js  c++  java
  • 串(string)是由零个或多个字符组成的有限序列,又名叫字符串。

    一些简单的概念:

    空格串,是包含空格的串。它与空串的区别就是空格串是有内容有长度的,而且可以不止一个空格。

    子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,包含子串的串称为主串。

    子串在主串中的位置就是子串的第一个字符在主串中的序号。

    //Index的实现算法
    //T为非空串,若主串S中第pos个字符之后存在与T相等的子串,则返回第一个这样的子串在S中的位置,否则返回0.
    int Index(String S,String T,int pos)
    {
    int n,m,i;
    String sub;
    if(pos>0)
    {
    n=StrLength(S);//得到主串S的长度
    m=StrLength(T);//得到子串T的长度
    i=pos;
    while(i<=n-m+1)
    {
    SubString(sub,S,i,m);//取主串第i个位置,长度与T相等子串给sub
    if(StrCompare(sub,T)!=0)//如果两串不相等
    ++i;
    else
    return i;//如果两串相等,则返回i值
    }
    }
    return 0;//若无子串与T相等,返回0
    }

    串有顺序存储结构与链式存储结构,顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列。按照预定义的大小 ,为每个定义的串变量分配一个固定长度的存储区。

    //用基本数据来实现上面的算法 
    //返回子串T在主串S中第pos个字符之后的位置,若不存在,则函数返回值为0
    //T非空,1<=pos<=StrLength(S)
    //主串S和要匹配的子串T的长度存在S[0]与T[0]中
    int Index(String S,String T,int pos)
    {
    int i=pos;//i用于主串S中当前位置下标,若pos不为1,则从pos位置开始匹配
    int j=1;//j用于子串T中当前位置下标值
    while(i<=S[0]&&j<=T[0])
    {
    if(S[i]==T[j])//两字母相等则继续
    {
    ++i;
    ++j;
    }
    else //指针后退重新开始匹配
    {
    i=i-j+2;//i退回到上次匹配首位的下一位
    j=1;
    }
    }
    if(j>T[0])
    return i-T[0];
    else
    return 0;
    }




  • 相关阅读:
    设计模式-可复用面向对象软件基础笔记
    C#--笔记
    win系统下nodejs安装及环境配置
    三步将Node应用部署到Heroku上 --转载
    Ubuntu 重启命令
    Ubuntu ssh免密登录
    Ubuntu Hadoop环境搭建(Hadoop2.6.5+jdk1.8.0_121)
    Ubuntu vim使用
    Scala学习——array与arraybuffer的区别(初)
    Scala学习——可变参数(初)
  • 原文地址:https://www.cnblogs.com/hxxy2003/p/2224918.html
Copyright © 2011-2022 走看看