`
jaychang
  • 浏览: 735130 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

串的插入,删除,定位,连接等操作

J# 
阅读更多
#include<stdlib.h>
#include<iostream>


#define MAXLEN 20
#define TRUE 1
#define FALSE 0

using namespace std;

typedef struct SString{
char ch[MAXLEN];
int len;
}SString;

//初始化串
void StrInit(SString *S)
{
char data;
S->len=0;
cout<<"请输入串,按#结束\n";
cin>>data;
while(data!='#')
{
   S->ch[S->len]=data;
   S->len++;
   cin>>data;
}
S->ch[S->len]='\0';
}

//将T串插入到S串pos开始,S串后移
int StrInsert(SString *S,int pos,SString *T)
{
int i;
if(pos<0||pos>S->len)return FALSE;
if(S->len+T->len<=MAXLEN){
   for(i=S->len+T->len-1;i>=T->len+pos;i--)
    S->ch[i]=S->ch[i-T->len];
   for(i=0;i<T->len;i++)
    S->ch[pos+i]=T->ch[i];
   S->len+=T->len;
}
else if(pos+T->len<=MAXLEN){
   for(i=MAXLEN-1;i>=pos+T->len;i--)
    S->ch[i]=S->ch[i-T->len];
   for(i=0;i<T->len;i++)
    S->ch[i+pos]=T->ch[i-T->len];
   S->len=MAXLEN;
}
else{
   for(i=pos;i<MAXLEN;i++)
    S->ch[i]=T->ch[i-pos];
   S->len=MAXLEN;
}
return TRUE;
}

//删除S串中从pos开始的len个字符
int StrDel(SString *S,int pos,int len)
{
int i;
if(pos<0||pos>(S->len-len))return FALSE;
for(i=pos+len;i<S->len;i++)
   S->ch[pos++]=S->ch[i];
S->len=S->len-len;
return TRUE;
}

//将串T拷贝到串S
int StrCpy(SString *S,SString *T)
{
int i;
for(i=0;i<T->len;i++){
   S->ch[i]=T->ch[i];
}
S->len=T->len;
return TRUE;
}

//判断串是否为空,为空返回TRUE,否则返回FALSE
int StrEmpty(SString *S)
{
int flag;
return S->len==0?flag=TRUE:flag=FALSE;
}

//串比较函数
int StrCompare(SString *S,SString *T)
{
int i=0;
if(S->len!=T->len)return FALSE;
while(i<S->len)
{
   if(S->ch[i]!=T->ch[i])
    return FALSE;
}
return TRUE;
}

//求串的长度
int StrLen(SString *S)
{
return S->len;
}

//清空串
int StrClear(SString *S)
{
S->len=0;
return TRUE;
}


//将串T连接到串S后
int StrCat(SString *S,SString *T)
{
int i;
if(S->len+T->len<=MAXLEN){
   for(i=0;i<T->len;i++)
    S->ch[S->len+i]=T->ch[i];
   S->len+=T->len;
}
else if(S->len<MAXLEN){
   for(i=S->len;i<MAXLEN;i++)
    S->ch[i]=T->ch[i-S->len];
   S->len=MAXLEN;
}
else{
   return FALSE;
}
return TRUE;

}

//求串S中pos开始, 串T第一次出现的位置
int StrIndex(SString *S,int pos,SString *T)
{
int i,j;
if(T->len==0)return FALSE;
i=pos;j=0;
while(i<S->len&&j<T->len)
{
   if(S->ch[i]==T->ch[j]){i++;j++;}
   else{
    i=i-j+1;
    j=0;
   }
}
if(j>=T->len)return i-j;
else return 0;
}

void StrOutput(SString *S)
{
int i;
for(i=0;i<S->len;i++)
   i!=S->len-1?cout<<S->ch[i]<<" ":cout<<S->ch[i]<<"\n";
}


int main()
{
char cmd;int pos;
int len;int index;
do{
   SString *S=(SString *)malloc(sizeof(SString));
   SString *T=(SString *)malloc(sizeof(SString));
   StrInit(S);StrInit(T);
   cout<<"求串T在串S中从pos开始第一次出现的位置,输入pos\n";
   cin>>pos;
   index=StrIndex(S,pos,T);
   cout<<"位置是"<<index<<"\n";
   cout<<"输入插入到串S的位置pos\n";
   cin>>pos;
   StrInsert(S,pos,T);
   StrOutput(S);
   cout<<"输入要删除串S中开始的序号pos及字符长度len\n";
   cin>>pos>>len;
   StrDel(S,pos,len);
   StrOutput(S);

   cout<<"输入y/Y继续,其他退出\n";
   cin>>cmd;
}while(cmd=='y'||cmd=='Y');
    return 0;

}
 
0
1
分享到:
评论

相关推荐

    链表的基本操作,包括插入数据和删除数据

    链表的操作主要包括插入和删除等,这些操作是实现更复杂算法的基础。 #### 链表的插入操作 在C语言中,链表的插入操作通常涉及到创建新节点、调整节点之间的连接以及释放内存等步骤。具体来说: 1. **创建新节点*...

    数据结构 串的操作

    串的常见操作包括创建、赋值、比较、查找、插入、删除、拷贝以及模式匹配等。 1. **创建与赋值**:创建串通常通过初始化来完成,例如在C++中`std::string str = "Hello, World!";`。赋值则是将一个已有的串的值赋予...

    串的顺序存储操作

    因此,在处理大量字符串操作或需要高效插入和删除的场景下,可能会选择其他数据结构,如链表存储的字符串。 总的来说,掌握串的顺序存储操作对于理解基本的数据结构和算法至关重要,这也是计算机科学教育的基础部分...

    数据结构-利用堆分配方式实现串的操作C语言

    2. **堆的插入操作**:在字符串操作中,可能需要将新的字符插入到已有的字符串中。这对应于在堆中插入新元素的过程,可能需要调整树的结构以满足堆的性质。 3. **堆的删除操作**:删除字符串中的字符,类似于从堆...

    数据结构 链表创建、插入、删除排序等

    下面我们将深入探讨链表的创建、插入、删除和排序等操作。 **链表的创建** 创建链表首先需要定义一个节点结构。例如,可以创建一个名为`Node`的结构体,包含一个数据成员`data`和一个指向下一个节点的指针`next`: ...

    线性链表的插入与删除

    总的来说,线性链表插入和删除的关键在于定位目标节点和正确地更新指针。这两个操作都需要遍历链表,找到目标位置,然后进行相应的内存管理和指针调整。通过对比这两个程序,我们可以看到不同实现风格对相同功能的...

    链表演示程序 插入删除等功能的实现

    在这个“链表演示程序”中,我们将会深入探讨如何实现链表的各种操作,包括插入和删除功能。 首先,让我们了解链表的基本概念。链表不同于数组,它不是一块连续的内存空间,而是由一系列节点组成,每个节点包含数据...

    数据结构——串的基本操作

    c++编写的串的基本操作。(全) cout遍历"; cout初始化"; cout串赋值"; cout判串相等"; cout求串长"; cout串连接"; cout求子串"; cout子串定位"; cout插入子串"; cout删除子串";

    OraExcel excel连接oracle插件 批量插入

    它允许用户直接在Excel环境中执行对Oracle数据库的操作,如查询、更新、删除和插入数据,而无需编写复杂的SQL语句或借助其他数据库管理软件。这种直观的方式极大地提高了工作效率,特别是对于需要频繁进行数据导入...

    数据结构(二叉树的创建 遍历 删除等基本操作)

    本程序旨在通过实现二叉树的创建、遍历、查找以及删除等基本操作,帮助学生深入理解和掌握二叉树的相关知识。 首先,我们要理解什么是二叉树。二叉树是一种特殊的树形数据结构,其中每个节点最多有两个子节点,通常...

    c++创建一个学生链表,进行链表的插入、删除、查找操作报告模板.链表借鉴.pdf

    本文将详细介绍如何在C++中创建一个学生链表,并进行链表的插入、删除、查找等基本操作,同时提供一份报告模板以供参考。 ### 创建链表 在C++中创建一个学生链表首先需要定义学生的数据结构。通常,我们会创建一个...

    字符串操作函数集合,具有各种对字符串操作的函数

    本文将详细介绍一个功能丰富的字符串操作函数集合,涵盖字符串的基本操作,如复制、删除、匹配、替换等功能,旨在为开发者提供一系列实用的工具,以简化字符串操作流程。 #### StrAssign:字符串赋值 `StrAssign`...

    c#连接mdb数据库图片插入源码

    在C#中,我们可以利用ADO.NET库来实现对数据库的连接、查询、插入、更新和删除等操作。以下是对这个主题的详细讲解: 1. ADO.NET简介:ADO.NET是.NET Framework的一部分,它提供了一组用于访问数据的组件和服务。它...

    字符串操作算法与数据结构课程设计.docx

    《字符串操作算法与数据结构课程设计》是一门深入探讨字符串处理技术的课程,涉及了多种字符串操作、模式匹配算法以及字符串加密解密方法。在实际应用中,字符串作为一种基础的数据类型,广泛存在于文本处理、文件...

    二叉排序树插入

    在数据结构中,二叉排序树(Binary Search Tree,BST)是一种十分重要的数据结构,它不仅能够存储具有排序性质的数据集合,还能够高效地完成插入、查找、删除等操作。二叉排序树插入算法是维护二叉排序树性质的关键...

    C语言链表的建立、插入和删除

    链表的建立、插入和删除是C语言中重要的数据结构操作,它们提供了动态管理和操作数据的能力。通过合理设计链表结构和操作函数,可以有效地解决数组大小限制的问题,提高程序的灵活性和效率。理解链表的基本原理和...

    单链表的创建,打印,插入与删除操作集.txt

    本文档将详细介绍如何在C语言环境中实现单链表的基本操作:创建、打印、插入与删除。 #### 二、单链表的定义 在C语言中,单链表通过结构体来定义。这里定义了一个`LNode`结构体,包含两个成员:`data`用于存储数据...

    SQLServer插入数据.rar

    在SQL Server数据库管理系统中,插入数据是日常操作的一部分,它允许我们向数据库表中添加新的记录。本资源“SQLServer插入数据.rar”包含了易语言编写的源码,用于演示或实现这一过程。易语言是一种简单易学的编程...

    易语言连接远程Oracle数据库源码

    4. **执行SQL语句**:通过ADODB.Command对象执行SQL查询、插入、更新或删除操作。 5. **处理结果集**:如果执行的是查询操作,可以获取ADODB.Recordset对象,遍历并处理返回的数据。 6. **关闭连接**:完成操作后...

Global site tag (gtag.js) - Google Analytics