首页 > 其他分享 >实验3 串的实现

实验3 串的实现

时间:2024-11-04 11:19:16浏览次数:2  
标签:cout 实现 len st int 实验 c2 c1

c++:
string就是一个数组看成str[N]数组就可以了,其他的好像都一样!

点击查看代码
#include <iostream>
#include<string>
using namespace std;
const int N = 1e7 + 5;

struct strs {
    string st;
    int len;
}s,c,c1,c2;
int next1[N];

int mumo() {
    cout << "您可以进行一下操作:\n";
    cout << "1:将串S中所有其值为c1的字符换成c2的字符\n";
    cout << "2:将串S中所有字符逆序\n";
    cout << "3:从串S中删除其值等于c的所有字符\n";
    cout << "4:从串S中第i个字符起求出首个与字符串S1相同的子串的起始位置\n";
    cout << "其他:退出\n";
    int k; cin >> k;
    return k;
}

void ne(strs cc){
    next1[1] = 0; 
    for (int i = 2, j = 0; i <= cc.len; i++){
        while (j && cc.st[i] != cc.st[j + 1])
            j = next1[j];
        if (cc.st[i] == cc.st[j + 1]) j++; 
        next1[i] = j;
    }
}

int kmp(int p,strs ss,strs cc){
    ne(cc);
    for (int i = 1, j = 0; i <= ss.len; i++) {
        while (j && ss.st[i] != cc.st[j + 1]) j = next1[j];
        if (ss.st[i] == cc.st[j + 1]) j++;
        if (j == cc.len){
            if(i - cc.len+1>=p)
                return i - cc.len+1;
            else {
                j = next1[j];
                continue;
            }
        }
    }
  return -1;
}

void swap_ctr() {
    string k=""; int p = -c1.len,l;
    while (1) {
        l = p;
        p = kmp(p+c1.len, s, c1);
        if (p == -1) break;
        for (int i = l+c1.len; i < p; i++) 
            if(i!=0)
              k += s.st[i];
        for (int i = 1; i <= c2.len; i++)
            k += c2.st[i];
    }
    if(l<=s.len)
        for (int i = l+c1.len; i <=s.len; i++)
            if (i != 0)
                k += s.st[i];
    s.st = k; s.len = k.length();
    cout << "替换后S为:\n" << s.st << endl;
    s.st = ' ' + s.st;
}

void ni() {
    string k;
    for (int i = s.len; i > 0; i--)
        k += s.st[i];
    cout << "逆序后为:\n" << k << endl;
    s.st = ' ' + k;
}

void del_str() {
    string k = ""; int p = -c.len, l;
    while (1) {
        l = p;
        p = kmp(p + c.len, s, c);
        if (p == -1) break;
        for (int i = l + c.len; i < p; i++)
            if (i != 0)
                k += s.st[i];
    }
    if (l <= s.len)
        for (int i = l + c.len; i <= s.len; i++)
            if(i!=0)
               k += s.st[i];
    s.st = k; s.len = k.length();
    cout << "删除c后S为:\n" << s.st << endl;
    s.st = ' ' + s.st;
}

int main(){
   int k;
   cout << "请输入一个字符串 S :\n";
   cin >> s.st; s.len = s.st.length();
   s.st = ' ' + s.st;
   do {
        k=mumo();
        switch (k)
        {
        case 1:
            cout << "请输入查找的字符串c1:\n";
            cin >> c1.st; c1.len = c1.st.length();
            c1.st = ' ' + c1.st;
            cout << "请输入要替换成的字符串c2:\n";
            cin >> c2.st; c2.len = c2.st.length();
            c2.st = ' ' + c2.st;
            swap_ctr();
            break;
        case 2:
            ni();
            break;
        case 3:
            cout << "请输入要删除的部分c:\n";
            cin >> c.st; c.len = c.st.length();
            c.st = ' ' + c.st;
            del_str();
            break;
        case 4:
            int i;
            cout << "请输入查找的起始位置(以1开始):\n";
            cin >> i;
            cout << "请输入要查找的字串:\n";
            cin >> c.st; c.len = c.st.length();
            c.st = ' ' + c.st;
            cout << kmp(i, s, c) << endl;
            break;
        default:
            break;
        }
   } while (k > 0 && k < 5);
    return 0;
}

标签:cout,实现,len,st,int,实验,c2,c1
From: https://www.cnblogs.com/liyutaocpp/p/18524827

相关文章

  • 基于Python的智能旅游推荐系统设计与实现
    一、摘要本毕业设计的内容是设计并且实现一个基于Python技术的智能旅游推荐系统。它是在Windows下,以MYSQL为数据库开发平台,使用Python技术进行设计。智能旅游推荐系统的功能已基本实现,主要实现首页,个人中心,用户管理,旅游资讯管理,景点信息管理,景点分类管理,酒店信息管理,行程分享......
  • 数据结构 ——— 链式二叉树的前中后序遍历递归实现
    目录前言链式二叉树示意图​编辑手搓一个链式二叉树链式二叉树的前序遍历链式二叉树的中序遍历链式二叉树的后序遍历 前言在上一章学习了链式二叉树的前中后序遍历的解析数据结构———链式二叉树的前中后序遍历解析-CSDN博客接下来要学习的是代码实现链式二叉树......
  • 华为eNSP实验:MAC地址漂移
    MAC地址漂移是指在同一个VLAN内,一个MAC地址有两个出接口,并且后学习到的出接口覆盖原出接口的现象。MAC地址漂移是网络设备(如交换机)上的一种现象,它发生在当同一个VLAN内有两个或多个端口学习到同一个MAC地址时,后学习到的MAC地址表项会覆盖原有的表项。这种现象通常意味着网络......
  • 实验8:适配器模式
    [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1. 对应的类图: 2. 源代码:Cat接口: publicinterfaceCat{  voidcry();  voidcatchMouse();} 实体Cat类: publicclassConcreteCatimplementsCat{    @Over......
  • 20222310 2024-2025-1 《网络与系统攻防技术》实验四实验报告
    一、实验内容(一)恶意代码文件类型标识、脱壳与字符串提取对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;(2)使用超级巡警脱壳机等脱壳软件,......
  • 体育资讯软件的实现ssm+论文源码调试讲解
    第二章开发工具及关键技术介绍2.1微信开发者工具微信开发者工具现在已经被小程序开发团队开发运行,目前微信开发者工具任然在不断的完善中,在开发小程序时经常要不断的更新。可以使用微信扫码登陆开发者工具,开发者工具将使用这个微信帐号的信息进行小程序的开发和调试。机型......
  • 实验9:桥接模式
    [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。 1.类图   1. 源代码1.Car.javapackagetest9; publicclassCarimplementsVehicle{    @Override    publicvoiddrive(){   ......
  • 20222425 2024-2025-1 《网络与系统安全技术》实验四报告
    202224252024-2025-1《网络与系统安全技术》实验四报告目录1.实践内容2.实践过程2.1恶意代码样本的文件类型识别,脱壳与字符串提取2.1.1使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具2.1.2使用脱壳软件,对rada恶意代码样本进行脱壳处理......
  • 用 Vue 和 CSS 快速实现电商风格的底部信息区域 从零开始:Vue 实现响应式电商底部布局
    效果图博客标题推荐用Vue和CSS快速实现电商风格的底部信息区域从零开始:Vue实现响应式电商底部布局新手必学!使用Vue构建精美电商底部导航Vue项目实战:构建电商风格的底部信息区域简单易懂!用Vue实现电商网站底部信息模块博客正文目录引言步骤一:创建基本HTML......