`
109735215
  • 浏览: 33221 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

串的基本算法

 
阅读更多

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Status int
#define ERROR 0
#define OVERFLOW 0
#define OK 1
#define MAX 81

typedef struct
{
char *ch;//若是非空串,则按串长分配空间,否则ch为NULL
int length;//串的长度
}HString;

//基本操作
void StrInit(HString &S);

Status StrInsert(HString &S,int pos, HString T);

Status StrAssign(HString &T,char *chars);

int StrLength(HString S);

int StrCompare(HString S,HString T);

Status ClearString(HString &S);

Status Concat(HString &T,HString S1,HString S2);

Status SubString(HString &Sub,HString S,int pos,int len);

/////////////////////////////////////////////////////////////////////////////////////////


#include<stdio.h>
#include"head.h"


void main()
{
char chars[MAX];
HString T,S,P,Sub;
StrInit(T);
StrInit(S);
StrInit(P);
StrInit(Sub);
printf("请输入字符串/n");
gets(chars);
StrAssign(T,chars);
puts(T.ch);
printf("请输入字符串/n");
gets(chars);
StrAssign(S,chars);
StrInsert(S,3,T);
puts(S.ch);
printf("S的长度为%d/n",S.length);
Concat(P,T,S);
puts(P.ch);
SubString(Sub,S,5,6);
puts(Sub.ch);
}//main

///////////////////////////////////////////////////////////////////////////////

#include<stdio.h>
#include "head.h"

void StrInit(HString &S)
{
S.ch=NULL;
S.length=0;
}

Status StrInsert(HString &S,int pos, HString T)
{
int i;
if(pos<1||pos>S.length+1) return ERROR;//pos的位置不合法
if(T.length)//T为非空,重新分配空间
{
if(!(S.ch=(char *)realloc(S.ch,(S.length+T.length)*sizeof(char))))
exit(OVERFLOW);
for(i=S.length-1;i>=pos-1;--i)//为了插入T而腾出空间
S.ch[i+T.length]=S.ch[i];
for(i=0;i<T.length;i++)
S.ch[pos-1+i]=T.ch[i];//插入T
S.length+=T.length ;
S.ch[S.length]='/0';
}//if
return OK;
}//StrInsert

Status StrAssign(HString &T,char *chars)
{
int i=0,j;
char *p;
if(T.ch)//释放T原有的空间
{
p=T.ch;
free(p);
T.ch=NULL;
}//if
while(chars[i]!='/0')//求chars的长度i
i++;
if(!i)//若chars为空
{
T.ch=NULL;
T.length =0;
}//if
else
{
if(!(T.ch=(char*)malloc(i*sizeof(char))))
exit(OVERFLOW);
for(j=i;j>=0;j--)
T.ch[j]=chars[j];
T.length =i;
}//else
return OK;
}//StrAssign

//返回S的元素的个数,称为串的长度
int StrLength(HString S)
{
return S.length;
}//StrLength

//比较两个字符串若S>T,则返回值>0,依次=0,<0
int StrCompare(HString S,HString T)
{
int i;
for(i=0;i<S.length&&i<T.length;++i)
if(S.ch[i]!=T.ch[i])
return S.ch[i]-T.ch[i];
return S.length-T.length;
}//StrCompare

Status ClearString(HString &S)
{
if(S.ch)
{
free(S.ch);
S.ch=NULL;
}//if
S.length=0;
return OK;
}//ClearString

Status Concat(HString &T,HString S1,HString S2)
{
int i;
if(T.ch)
free(T.ch);//释放旧空间
if(!(T.ch=(char *)malloc((S1.length+S2.length)*sizeof(char))))
exit(OVERFLOW);
for(i=0;i<S1.length;i++)
T.ch[i]=S1.ch[i];
T.length=S1.length+S2.length;
for(i=0;i<S2.length;i++)
T.ch[S1.length+i]=S2.ch[i];
T.ch[T.length]='/0';
return OK;
}//Concat

//用Sub返回串S的第pos个字符起长度为len 的子串
Status SubString(HString &Sub,HString S,int pos,int len)
{
int i;
if(pos<1||pos>S.length||len<0||len>S.length-pos+1)
return ERROR;
if(Sub.ch)
free(Sub.ch);//释放旧空间
if(!len)//空子串
{
Sub.ch=NULL;
Sub.length=0;
}//if
else
{
Sub.ch=(char *)malloc(len*sizeof(char));
for(i=0;i<len;i++)
Sub.ch[i]=S.ch[pos-1+i];
Sub.length=len;
Sub.ch[Sub.length]='/0';
}//else
return OK;
}//SubString

分享到:
评论

相关推荐

    实现并对比三种基本的字符串匹配算法

    首先对三种基本字符串匹配算法进行了详细分析和说明,再编程实现。创新拓展研究了Boyer-Moore算法,进行了分析和编程实现。让四种算法对数据量极大的文本,进行子串的查询处理,并分析算法运行时间效率,并对所有...

    带通配符的字符串匹配算法

    在IT领域,字符串匹配是计算机科学中的一个基本问题,尤其在文本处理、数据搜索和模式识别等场景中广泛应用。带通配符的字符串匹配算法则是这个领域的延伸,它允许在模式字符串中包含特殊字符,如星号(*)或问号(?),...

    字符串匹配算法C代码实现

    本篇文章将详细探讨四种常见的字符串匹配算法:平凡算法(SimpleSM)、KMP算法(KMPSM)、BM算法(bmSM)以及RK算法(rkSM),并分析它们的基本原理和C代码实现。 1. **平凡算法(SimpleSM)** 平凡算法是最基础的...

    串匹配算法

    - **基本思想**:算法1是最直观的串匹配方法,通过遍历正文的所有子段,逐个字符比较模式与子段是否完全匹配。 - **子段划分**:在长度为n的正文中,可划分为n-m+1个子段,每个子段长度等于模式P的长度m。 - **输入...

    字符串匹配算法总结

    字符串匹配是计算机科学中的一种基本问题,涉及到对文本数据的搜索和分析。在这个问题中,目标是找出一个较长的字符串(匹配串)中是否存在一个较短的子串(模式串)。这里我们将深入探讨几种常见的字符串匹配算法,...

    串的基本操作 kmp算法实现

    串的替换,删除,查找 以及KMP算法的具体的实现 c语言 数据结构

    数据结构演示swf——串系列(串的顺序存储、朴素串匹配算法过程示意)很不错,很直观!

    算法的基本思想是从文本串的起始位置开始,逐个字符与模式串进行比较,如果发现不匹配,则将文本串的指针向右移动一位,然后再次尝试匹配。这个过程一直持续到找到匹配或者文本串的结束。朴素串匹配算法虽然简单易懂...

    字符串匹配算法小集(英文)

    通过对这35种不同字符串匹配算法的分析,我们不仅了解了各种算法的基本原理和应用场景,还能够根据具体需求选择最适合的算法来解决问题。随着计算机科学的发展,新的算法和技术仍在不断涌现,为解决实际问题提供了更...

    基于字符串模式匹配算法的病毒感染检测问题_算法_数据结构_

    首先,我们需要了解字符串模式匹配的基本概念。在这一背景下,我们有一个目标字符串(通常代表一段文件内容)和一个模式字符串(可能是已知的病毒签名)。我们的任务是检查目标字符串中是否存在模式字符串,如果存在...

    用C语言写的链式字符串运算算法

    接下来,我们要介绍链式字符串的基本操作: 1. **创建字符串**:创建链式字符串涉及分配新的节点并初始化其数据(字符)和指针(指向下一个节点)。 2. **插入字符**:在链式字符串的特定位置插入字符需要找到目标...

    C语言字符串快速压缩算法代码

    这个算法体现了C语言中对字符串的基本操作,包括字符数组的使用、字符串函数(如`strlen`)的调用以及自定义字符串处理逻辑。同时,它也展示了如何处理多种情况和数据类型之间的转换,这些都是C语言编程中的基础技能...

    用C++实现BM的字符串模式匹配算法

    首先,让我们理解BM算法的基本原理。BM算法的核心思想是利用模式串中的信息来避免不必要的比较,通过跳过一些不可能匹配的字符,提高搜索效率。这主要依赖于坏字符规则和好后缀规则。 1. **坏字符规则**:当模式串...

    kmp字符串查找算法

    首先,我们需要理解KMP算法的基本步骤: 1. **构建部分匹配表**:这是KMP算法的关键部分。对于给定的子串,部分匹配表记录了当子串中的某个字符与主串中的字符不匹配时,我们如何利用已匹配的字符信息。具体来说,...

    串KMP算法的作业

    这是我上实验课时候做的KMP算法,基本实现了串的一些基本功能

    MyString——关于串的几个基本算法

    本篇将深入探讨"串"(字符串)的几个基本算法,包括查找、删除和替换,这些都是在实际编程中常见的操作。 一、字符串查找算法 1. **线性查找**:是最简单的查找方法,从字符串的第一个字符开始逐个比较,直到找到...

    LZ78算法实现对任意字符串的压缩与解压

    通过理解和实现LZ78算法,不仅可以学习到数据压缩的基本原理,还能深入理解字符串处理、字典数据结构和位操作等编程技巧。在实际应用中,LZ78算法常被用作其他更高效压缩算法的基础,例如LZW(Lempel-Ziv-Welch)...

Global site tag (gtag.js) - Google Analytics