林皇加德 2021-05-15 19:44 采纳率: 0%
浏览 38

求大佬解答下java实验题

请问一下关于java版本的实验题 1.实现串定长顺序存储表示的Replace(&S,T,V), StrInsert(&S,pos,T)的操作 2.请问一下关于实现串堆分配存储表示的Replace(&S,T,V), StrInsert(&S,pos,len)

  • 写回答

2条回答 默认 最新

  • 关注

    定长顺序串SString的类型

    typedef unsigned char SString[MAXSTRLEN+1];  
    /* s[0] is the string's length */

    实现函数如下:

    Status Replace(SString& s, SString t, SString v)
    /* 用串v替换串s中所有和串t匹配的子串。  */
    /* 若有与t匹配的子串被替换,则返回TRUE;*/
    /* 否则返回FALSE                        */
    {
        int i,j,k,b,p,pos,flag;
        i = 1;
        flag = 0;
        k = t[0] - v[0];        //串t与串v的长度差
        while(i <= s[0]-t[0]+1){
            j = 1;
            pos = i;         //记录当前模式串的位置
            while(j <= t[0]){
                if(s[pos] == t[j]){//模式串匹配
                    ++j;
                    ++pos;
                }
                else
                    break;
            }
            if(j > t[0]){    //模式串匹配成功,进行替换操作 
                if(k == 0){   //串t与串v的长度相等
                    for(j = 1,p = i;j <= v[0];++p,++j){
                        s[p] = v[j];                  
                    }
                }
                if(k > 0){//串t的长度大于串v的长度
                    for(j = 1,p = i;j <= v[0];++p,++j){
                        s[p] = v[j];                  
                    }
                    for(p = pos;p <= s[0];++p){//被替换子串后的元素往前移
                        s[p-k]=s[p];
                    }
                    s[0] = s[0] - k;//当前主串长度改变
                }
                if(k < 0){//串t的长度小于串v的长度
                    for(p = s[0]; p >= i;--p){ //被替换子串后的元素往后移
                        s[p-k] =s[p];
                    }
                    for(j = 1,p = i;j <= v[0];++p,++j){
                        s[p] = v[j];                   
                    }
                    s[0] = s[0] - k;//当前主串长度改变
                }            
                flag = 1;      //匹配成功,标记为1               
            }
            else 
                ++i;          //模式串匹配不成功,模式串向后移
        }
        if(flag)
            return TRUE;
        else
            return FALSE;    
    }
    评论

报告相同问题?

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境