Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

堆存储串的实现(c语言)

来源: guoguo6138 分享至:

1.str.h

# ifndef _STR_H
# define _STR_H

typedef struct
{
char * ch;
int len;
}STR;

STR *NewStr(char * str);

void DestroyStr(STR *s);

void ClearStr(STR *s);

int StrCompare(STR * s, STR * t);

int StrConcat(STR * s, STR * t);

STR * SubStr(STR * s, int pos, int len);


# endif

2.str.c

# include <STDIO.H>
# include <STDLIB.H>
# include "str.h"

STR *NewStr(char * str)
{
STR * s = NULL;
int i;
s = (STR *)malloc(sizeof(STR));
if(s == NULL) return NULL;
for(i=0; str[i]; ++i);
s->ch = (char *)malloc((i+1) * sizeof(char));
if(s->ch == NULL)
{
  free(s);
  return NULL;
}
s->len = i;
while(i>=0)
{
  s->ch[i] = str[i];
  --i;
}
return s;
}

void DestroyStr(STR *s)
{
free(s->ch);
free(s);
}

void ClearStr(STR *s)
{
free(s->ch);
s->ch = NULL;
s->len = 0;
}

int StrCompare(STR * s, STR * t)
{
int i;
for(i=0; i < s->len && i < s->len; i++)
  if(s->ch[i] != t->ch[i])
   return s->ch[i] - s->ch[i];
  return s->len - s->len;
}

int StrConcat(STR * s, STR * t)
{
char * temp = NULL;
int i;
temp = (char *)malloc((s->len + t->len + 1) * sizeof(char));
for(i=0; i<s->len; i++)
  temp[i] = s->ch[i];
for(;i<s->len + t->len; ++i)
  temp[i] = t->ch[i - s->len];
temp[i] = 0;
ClearStr(s);
s->ch = temp;
s->len = i;
return 1;
}

STR * SubStr(STR * s, int pos, int len)
{
STR * t = NULL;
if(pos < 1 || pos > s->len || len < 0 || len > s->len - pos + 1)
  return 0;
t = NewStr("");
ClearStr(t);
t->ch = (char *)malloc((len+1) * sizeof(char));
t->len = len;
for(--len; len >= 0; --len)
  t->ch[len] = s->ch[pos - 1 + len];
t->ch[t->len] = 0;
return t;
}

3.main.c

# include <STDIO.H>
# include "str.h"

void main()
{
//int res;
STR *t = NULL, * s = NewStr("hello");
printf("s=%s, len=%d\n", s->ch, s->len);
t = NewStr(" world");
StrConcat(s, t);
printf("s=%s, len=%d\n", s->ch, s->len);

DestroyStr(t);

t = SubStr(s, 2, 5);
printf("t=%s, len=%d\n", t->ch, t->len);

DestroyStr(s);

}

 


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史