串的基本计算

#include<stdio.h>

#include<stdlib.h>

//typedef int Status;

#define Max 20

#define OK 1

#define ERROR 0

#define OVERLOE -2

typedef struct//堆分配表示串

{

 char *ch;

 int length;

}HString;

//===================================================================

int CreatHString(HString &H)//构造字符串

{

 H.length = 0;

 H.ch = (char *)malloc(Max*sizeof(char));

 for (int i = 0; i < Max; i++)

 {

  H.ch[i]=getchar();

  H.length++;

  if (getchar() == '\n')

   break;

 }

 return OK;

}//CreatHString

//===================================================================

int PrintHString(HString H)//输出所输入的字符串

{

 if (H.length == 0)

 {

  printf( "空串!" );

  return ERROR;

 }

 else

  for (int i = 0; i < H.length; i++)

   printf("%c",H.ch[i]);

  printf("\n");

 return OK;

}//PrintHString

//===================================================================

int HStringLength(HString H)//求字符串的长度

{

 printf( "您输入的字符串长度为:" );

 printf("    %d ",H.length);

 return OK;

}//HStringLength

//===================================================================

int HStringCompare(HString H, HString T)//求两个字符串长度差(绝对值)

{

printf( "两个字符串的长度差为:" );

 int L;

  L = H.length - T.length;

 if (L<0)

 printf("%d",-L);

 if (L>=0)

 printf("%d",L);

 return OK;

}//HStringCompare

//===================================================================

int ConcatHString(HString &S, HString H, HString T)//链接H和T

{

 if (!(S.ch = (char *)malloc((H.length + T.length)*sizeof(char))))

  exit(OVERLOE);

 for (int i = 0; i < H.length; i++)

  S.ch[i] = H.ch[i];

 S.length = H.length + T.length;

 for (int j = H.length; j < S.length; j++)

  S.ch[j] = T.ch[j-H.length];

 return OK;

}//ConcatHString

//===================================================================

int SubHString(HString &Sub, HString S, int pos,int len)

{//用Sub返回串S的第pos个字符起长度为len的子串

 if (pos<1 || pos>S.length)

 {

  printf( "输入的位置有误!" );

  return ERROR;

 }

 if (len<0 || len>S.length - pos + 1)

 {

  printf( "输入的长度有误!" );

  return ERROR;

 }

 if (!len)

 {

  Sub.ch = NULL;

  Sub.length = 0;

 }

 else

 {

  Sub.ch = (char *)malloc(len*sizeof(char));

  for (int i = 0; i < len ; i++)

   Sub.ch[i] = S.ch[pos + i - 1];

  Sub.length = len;

 }

 return OK;

}//SubHString

//===================================================================

int ClearHString(HString &H)//将H清为空串

{

 if (H.ch)

 {

  free(H.ch);

  H.ch = NULL;

 }

 H.length = 0;

 return OK;

}//ClearHString

//===================================================================

void main()

{

 HString S,H,T;

 printf( "请输入一个字符串(按回车键结束):" );

 CreatHString(H);

 printf("现在串中的字符为:" );

 PrintHString(H);

 HStringLength(H);

 printf( "请再输入一个字符串(按回车键结束):" );

 CreatHString(T);

 HStringCompare(H, T);

 ConcatHString(S, H, T);

 printf("现在串中的字符为:" );

 PrintHString(S);

 HString Sub;

 int pos, len;

 printf( "请输入截取位置pos及长度len:" );

 scanf( "%d%d",&pos,&len);

 SubHString(Sub, S, pos, len);

 printf( "截取的子串为:" );

 PrintHString(Sub);

 ClearHString(S);

 printf ("检验S清空后是否为空:" );

 PrintHString(S);

}//main

 

posted @ 2017-11-18 20:01  离愁i  阅读(349)  评论(0编辑  收藏  举报