快捷导航
帮助中心知识拓展客服QQ 515224986
扫码加微信
西交《数据结构》拓展资源(四)
第四章 串
串的基本操作
前记:这一章课件里主要讲了串的属性和一些常用的操作。课件里面是通过伪代码的方式来进行描述,这样有利于同学们的理解,以及能够适用于各种编程语言。下面就针对C++语言对这些基本操作做一个具体的实现,大家在运用中可以参考。
mystring.h:
#ifndef MYSTRING_H
#define MYSTRING_H
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define MAXSIZE 1000
#define SIZEINCREASE 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define FORMAT "%3c"
#define TURNLINE printf("\n\n")
typedef long Status;
typedef char ElemType;
typedef struct
{        ElemType *ch;
int length; //字符串的长度,不包含空字符
}String;
void test();
void strPrint(String *);  //打印字符串
Status strAssign(String *,char *);  //复制字符串
Status strCopy(String *sourceString,String *destinationString);  //复制字符串
int strCompare(String *s1,String *s2);  //比较两个字符串
Status strClear(String *s);  //清理字符串
Status strContact(String *s3,String *s1,String *s2);  //连接两个字符串
Status subString(String *sub,String *s,int pos,int len);  //返回某个字符串在第i个位置的子串
void test()
{        printf("step here...");
TURNLINE;        }
void strPrint(String *s)
{        int index;
for(index=0;s->ch[index];++index)
printf(FORMAT,s->ch[index]);
TURNLINE;
}
Status strAssign(String *s,char *chars)
{        int i=0,index=0;
char *c=NULL;
c=chars;
for(;*c!='\0';++i,++c);
if(!i)
{        s->ch=NULL;
s->length=0;}
Else
{        s->ch=(ElemType *)malloc((i+1)*sizeof(ElemType));
if(!s->ch)
exit(OVERFLOW);
for(;index<=i;++index)
{        s->ch[index]=chars[index];}
s->ch[i+1]='\0';
s->length=i;}
return OK;
}
Status strCopy(String *sourceString,String *destinationString)
{        int index=0;
if(sourceString->length ==0)
{        printf("源串为空串");
TURNLINE;
}
destinationString->ch=(ElemType *)malloc((sourceString->length+1)*sizeof(ElemType));
if(!destinationString) exit(OVERFLOW);
destinationString->length =sourceString->length ;
for(;index<=sourceString->length ;++index)
destinationString->ch[index]=sourceString->ch[index];
destinationString->ch[sourceString->length +1]='\0';
return OK;
}
int strCompare(String *s1,String *s2)
{        int i=0;
for(;i<=s1->length &&i<=s2->length ;++i)
{        if(s1->ch[i]!=s2->ch[i])
return s1->ch[i]-s2->ch[i];
}
return s1->length -s2->length ;
}
Status strClear(String *s)
{        free(s->ch);
s->ch=NULL;
s->length =0;
return OK;
}
Status strContact(String *s3,String *s1,String *s2)
{        int index=0,j=s1->length ;
s3->ch=(ElemType *)malloc((s1->length+s2->length+1)*sizeof(ElemType)); if(!s3->ch)         exit(OVERFLOW);
for(;s1->ch[index];++index)
{        s3->ch[index]=s1->ch[index];        }
for(index=0;s2->ch[index] ;++index,++j)
{        s3->ch[j]=s2->ch[index];        }
s3->ch[s1->length+s2->length+1]='\0';
s3->length =s1->length+s2->length;
return OK;
}
Status subString(String *sub,String *s,int pos,int len)
{        int index,i;
if(pos<1||pos>s->length||len<0)??exit(OVERFLOW);
sub->ch=(ElemType *)malloc((len+1)*sizeof(ElemType));
if(!sub)         exit(OVERFLOW);
for(index=pos-1,i=0;i<len;++index,++i)
sub->ch[i]=s->ch[index];
sub->ch[i+1]='\0';
sub->length=i;
return OK;
}
#endif
调用的main函数:
#include "mystring.h"
#include "fun.h"
int main()
{        String str1,str2,str3;int index;
char *chars="acabaabaabcacaabc\0";
char *chars1="abc\0";
strAssign(&str1,chars);
strAssign(&str2,chars1);
strPrint(&str1);
strPrint(&str2);
subString(&str3,&str1,5,100);
strPrint(&str3);
index=Index(&str2,&str1,9);
printf("%d\n",index);
return 0;
}本内容由易百网整理发布
网址 www.openhelp100.com
QQ 515224986

共 0 个关于本帖的回复 最后回复于 2021-3-19 11:39

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩推荐

    明星用户

    QQ|Archiver|手机版|小黑屋|www.openhelp100.com ( 冀ICP备19026749号-1 )

    GMT+8, 2024-4-28 08:39