西交《数据结构》拓展资源(四)
西交《数据结构》拓展资源(四)第四章 串
串的基本操作
前记:这一章课件里主要讲了串的属性和一些常用的操作。课件里面是通过伪代码的方式来进行描述,这样有利于同学们的理解,以及能够适用于各种编程语言。下面就针对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)
printf(FORMAT,s->ch);
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=chars;}
s->ch='\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=sourceString->ch;
destinationString->ch='\0';
return OK;
}
int strCompare(String *s1,String *s2)
{ int i=0;
for(;i<=s1->length &&i<=s2->length ;++i)
{ if(s1->ch!=s2->ch)
return s1->ch-s2->ch;
}
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)
{ s3->ch=s1->ch; }
for(index=0;s2->ch ;++index,++j)
{ s3->ch=s2->ch; }
s3->ch='\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=s->ch;
sub->ch='\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
页:
[1]