串操作

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "string_lib.h"

/*拷贝src到dst,dst[0]为src长度*/
int str_assign(STRING *dst, char *src)
{
 int i = 0;
 
 if(NULL == src)
 {
  return -1;
 }
 if(dst.string != NULL)
 {
  free(dst->string);
  dst.string = NULL;
 }
 while(src[i] != '\0' && src[i] != '\n')
 {
  i++;
 }
 if(0 == i)
 {
  dst->length = 0;
  dst->string = NULL;
 }
 else
 {
  dst->string = (char *)malloc(i + 1);
  if(NULL == dst->string)
  {
   return -1;
  }
  memcpy(dst->string, src, i);
  dst->length = i;
 }

 return 0;
}

/* 由串S复制得串T */  
int str_copy(STRING *dst, STRING src)
{
 return 0;
}

/*判断字符串是否为空*/
BOOL is_str_empty(STRING str)
{
 if(0 == str.length)
 {
  return TRUE;
 }
 else
 {
  return FALSE;
 }
}

/*获取字符串长度*/
int str_length(STRING str)
{
 return str.length;
}


/*比较字符串,相等返回0*/
int str_compare(STRING dst, STRING src)
{
 int i = 0;

 for(i = 0; i < dst.length && i < src.length; i++)
 {
  if(dst.string[i] != src.string[i])
  {
   return dst.string[i] - src.string[i];
  }
 }
 
 return dst.length - src.length;
}

/*释放字符串的内存*/
int destroy_str(STRING *str)
{
 if(NULL == str)
 {
  return -1;
 }
 
 if(str->string != NULL)
 {
  free(str->string);
  dst->string = NULL;
  str->length = 0;
 }

 return 0;
}


/*字符串拼接*/
int string_cat(STRING *dst, STRING src1, STRING src2)
{
 if(NULL == dst)
 {
  return -1;
 }

 if(dst->string != NULL)
 {
  free(dst->string);
  dst->string = NULL;
  dst->length = 0;
 }
 dst->string = (char *)malloc(src1.length + src2.length + 1);
 if(NULL == dst->string)
 {
  return -1;
 }
 dst->length = src1.length + src2.length;
 memcpy(dst->string, src1.string, src1.length);
 memcpy(dst->string + src1.length, src2.string, src2.length);

 return 0;
}

/*从src中的pos地方开始获取len长度的字符串到sub中*/
int string_sub(STRING *sub, STRING src, int pos, int len)
{
 if(NULL == sub)
 {
  return -1;
 }
 if(sub->string != NULL)
 {
  free(sub->string);
  sub->length = 0;
 }

 if(pos >= src.length || pos <= 0 || pos + len > src.length + 1 || len < 0)
 {
  return -1;
 }

 sub->string = (char *)malloc(len + 1);
 if(NULL == sub->string)
 {
  return -1;
 }

 memcpy(sub->string, src.string + pos, len);
 sub->length = len;

 return 0;
}

/*获取dst中pos位置开始的地方和src长度一样的位置*/
int str_index(STRING dst, STRING src, int pos)
{
 int dst_len = 0;
 int src_len = 0;
 int i = pos;
 STRING sub;

 memset(&sub, 0, sizeof(STRING));
 dst_len = str_length(dst);
 src_len = str_length(src);
 while(i < dst_len - src_len + 1)
 {
  /*截取一段字符串*/
  string_sub(&sub, dst, i, src_len);
  /*比较*/
  if(0 == str_compare(sub, src))
  {
   return i;
  }
  else
  {
   i++;
  }
 }

 return -1;
}


 

typedef struct
{
 char *string;
 int length;
}STRING;

int str_copy(STRING *dst, STRING src);
BOOL is_str_empty(STRING str);
int str_length(STRING str);
int str_compare(STRING dst, STRING src);
int clear_str(STRING *str);
int string_cat(STRING *dst, STRING src1, STRING src2);
int string_sub(STRING *sub, STRING src, int pos, int len);
int str_assign(STRING *dst, char *src);


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值