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

串顺序实现的代码 测试

 
阅读更多

/* c1.h (程序名) */
#include<string.h>
#include<ctype.h>
#include<malloc.h> /* malloc()等 */
#include<limits.h> /* INT_MAX等 */
#include<stdio.h> /* EOF(=^Z或F6),NULL */
#include<stdlib.h> /* atoi() */
#include<io.h> /* eof() */
#include<math.h> /* floor(),ceil(),abs() */
#include<process.h> /* exit() */
/* 函数结果状态代码 */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
/* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
/* c4-1.h 串的定长顺序存储表示 */
#define MAX_STR_LEN 40 /* 用户可在255(1个字节)以内定义最大串长 */
typedef char SString[MAX_STR_LEN+1]; /* 0号单元存放串的长度 */

Status StrAssign(SString T,char *chars)
{ /* 生成一个其值等于chars的串T */
int i;
if(strlen(chars)>MAX_STR_LEN)
return ERROR;
else
{
T[0]=strlen(chars);
for(i=1;i<=T[0];i++)
T[i]=*(chars+i-1);
return OK;
}
}

void StrPrint(SString T)
{ /* 输出字符串T。另加 */
int i;
for(i=1;i<=T[0];i++)
printf("%c",T[i]);
printf("/n");
}

int StrCompare(SString S,SString T)
{ /* 初始条件:串S和T存在。操作结果:若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0 */
int i;
for(i=1;i<=S[0]&&i<=T[0];++i)
if(S[i]!=T[i])
return S[i]-T[i];
return S[0]-T[0];
}
Status SubString(SString Sub,SString S, int pos,int len)
{
int i;
if(pos<1||pos>S[0]||len<0||len>S[0]-pos+1)
return ERROR;
for(i=1;i<=len;i++)
Sub[i]=S[pos+i-1];
Sub[0]=len;
return (*Sub);
}

int Index(SString S,SString T,int pos)
{ /* 返回子串T在主串S中第pos个字符之后的位置。若不存在,则函数值为0。 */
/* 其中,T非空,1≤pos≤StrLength(S)。算法4.5 */
int i,j;
if(1<=pos&&pos<=S[0])
{
i=pos;
j=1;
while(i<=S[0]&&j<=T[0])
if(S[i]==T[j]) /* 继续比较后继字符 */
{
++i;
++j;
}
else /* 指针后退重新开始匹配 */
{
i=i-j+2;
j=1;
}
if(j>T[0])
return i-T[0];
else
return 0;
}
else
return 0;
}
Status StrInsert(SString S,int pos,SString T)
{ /* 初始条件:串S和T存在,1≤pos≤StrLength(S)+1 */
/* 操作结果:在串S的第pos个字符之前插入串T。完全插入返回TRUE,部分插入返回FALSE */
int i;
if(pos<1||pos>S[0]+1)
return ERROR;
if(S[0]+T[0]<=MAX_STR_LEN)
{ /* 完全插入 */
for(i=S[0];i>=pos;i--)
S[i+T[0]]=S[i];
for(i=pos;i<pos+T[0];i++)
S[i]=T[i-pos+1];
S[0]+=T[0];
return TRUE;
}
else
{ /* 部分插入 */
for(i=MAX_STR_LEN;i>=pos+T[0];i--)
S[i]=S[i-T[0]];
for(i=pos;i<pos+T[0]&&i<=MAX_STR_LEN;i++)
S[i]=T[i-pos+1];
S[0]=MAX_STR_LEN;
return FALSE;
}
}
//////////////////////////////
void main()
{
int i,j;
Status k;
char s,c[MAX_STR_LEN+1],d[MAX_STR_LEN+1];
SString t,s1,s2,s3;
printf("请输入串s1: ");
gets(c);
k=StrAssign(s1,c);
StrPrint(s1);
printf("请输入串s2: ");
gets(d);
k=StrAssign(s2,d);
StrPrint(s2);
i=StrCompare(s1,s2);
printf("i=%d/n",i);

k=SubString(s3,s2,2,2);
StrPrint(s3);
j=Index(s1,s2,2);

printf("=%d/n",j);
StrInsert(s2,2,s1);
StrPrint(s2);
printf("/n");
StrPrint(s1);
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics