`
jaychang
  • 浏览: 718038 次
  • 性别: 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语言

    这是我买的一本课程设计案例书上的源代码,上面的案例很经典,特别适合于作 毕业设计的学生使用,当然了,也可以做为做课程设计的学生以参考,希望能给 大家提供帮助!!

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

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

    数据结构串的操作实例详解

     关于串的操作主要有求串长,串复制,串连接,求子串,串插入,串删除,子串定位等。串的操作也是C语言笔试中常考的一部分。  下面的代码实现了串的主要操作。 #include #include &lt;stdlib&gt; #define MAXSIZE ...

    18.C#字符串和正则表达式参考手册 影印版

    2.6.4 插入、删除和替换 61 2.7 小结 66 第3章 字符串转换 68 3.1 ToString()方法 68 3.2 把数值表示为字符串 69 3.3 把日期和时间表示为字符串 74 3.4 把其他对象表示为字符串 76 3.5 用字符串表示字符串 78 3.6 把...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...

    Oracle数据库实验操作

    实验22:dml语句,插入删除和修改表的数据 49 实验23:事务的概念和事务的控制 52 实验24:在表上建立不同类型的约束 54 实验25:序列的概念和使用 58 实验26:建立和使用视图 60 实验27:查询结果的集合操作 63 ...

    mysql数据库的基本操作语法

    索引是通过快速访问的方法来进行快速定位数据,从而减少了对磁盘的读写操作。 索引是数据库的一个对象,它不能独立存在,必须对某个表对象进行依赖。 提示:索引保存在information_schema数据库里的STATISTICS表中。...

    C++编写的一个小型数据库系统

    "Mini Database System using B+ Tree in C++" 的意思是使用C++编写一个小型数据库系统,该系统使用B+树作为数据结构来实现数据的...这个系统可以提供一些常见的数据库操作,比如插入数据、删除数据和查询数据等功能。

    Excel基本操作技巧培训资料.pptx

    保证输入内容与自动填充操作无缝连接 Excel基本操作技巧培训资料全文共56页,当前为第14页。 常用快捷键及功能介绍(七) 快捷键:ALT+DFF 功能:筛选 应用举例:部门人员筛选、自定义排序 Excel基本操作技巧培训...

    C#企业人事管理系统 vs2005+sqlserver2005

    (13)单击“人事管理”菜单栏中的“人事档案浏览”命令,通过该窗体,可对职工基本信息、工作简历、家庭关系、培训记录、奖惩记录和个人简历等信息进行添加、修改、删除及查询操作。 (14)单击“人事管理”菜单栏...

    orcale常用命令

    数据字典里存有用户信息、用户的权限信息、所有数据对象信息、表的约束条件、统计分析数据库的视图等。 我们不能手工修改数据字典里的信息。  很多时候,一般的ORACLE用户不知道如何有效地利用它。  dictionary...

    C++编程思想(第2版 第2卷)

     3.3.1 追加、插入和连接字符串   3.3.2 替换字符串中的字符   3.3.3 使用非成员重载运算符连接   3.4 字符串的查找   3.4.1 反向查找   3.4.2 查找一组字符第1次或最后一次出现的位置   3.4.3 ...

    Oracle SQL Handler (Oracle客户端工具) V3.1

    请参照解压后的帮助文件 Help.html 【软件功能】 &lt;1&gt; 以表格的形式显示 Select SQL 语句的查询结果,可以直接对查询结果进行再操作,如修改、插入、删除、保存、多功能拷贝、导出、数字统计、行列移动、列排序等;...

    IMap地质绘图软件(免费)

    图层插入、增加、删除、复制、粘贴、可见、可编辑、显示顺序等功能。 可以插入比例尺、坐标框、表格等修饰对象。 对象可以组合-拆分,线可以截断-连接,折线与曲线互换换。 图元对象复制、剪切、粘贴、删除、恢复、...

    visio教程PDF

    8.8.2 从页面中删除网格、标尺相连接点 8.8.3 设定页边距 8.8.4 调整页面大小和方向 8.8.5 调整绘图比例 8.8.6 加页眉和页脚 8.9 小结 第9章 调整视图 9.1 缩放和扫视 9.1.1 标准工具栏中的...

    Visio 2000 技术大全

    8.8.2 从页面中删除网格、标尺相连接点 8.8.3 设定页边距 8.8.4 调整页面大小和方向 8.8.5 调整绘图比例 8.8.6 加页眉和页脚 8.9 小结 第9章 调整视图 9.1 缩放和扫视 9.1.1 标准...

Global site tag (gtag.js) - Google Analytics