[原创]linux c 字符串相关处理包装函数

 原来构建的一版字符串对象基本能实现面向对象语言中(.net java)的一些功能,但是在实际使用过程中发现由于系统没法辨认堆内存还是栈内存(比如传过来一个 char *,处理函数内内部就无法辨认),所以在处理过程中的内存自动释放就会残生问题,结果就是使用起来很不方便,现在做了一些调整,让大部分函数都能同时对堆 内存又能对栈内存进行处理
头文件定义如下:
/*
* File: strings.h:字符串相关处理函数定义
* Author: netpet
* Flower net server
* 本程序是为一体化web server产品专用设计,具有部分代码为具体产品优化而不代表普遍通用性的特性
* 程序在linux 2.46下调试通过,编辑工具netbeans 6.1 for c
* 联系方式:Email:netpetboy@163.com QQ:51977431
* Created on 2008年5月26日, 下午4:18
*/

#ifndef _STRINGS_H
#define    _STRINGS_H

#ifdef    __cplusplus
extern "C" {
#endif

#include "arrays.h"
#define DefaultStringSize 14
typedef char * String;

/*
*功能:构建一个String结构体对象,容量为DefaultStringSize
*参数:无
*返回:String对象指针
*/
extern String StringNew(void);
/*
*功能:构建一个String结构体对象,并且将给定的str字符串拷贝给他
*     str该字符串既可以是堆内存也可以是栈内存
*参数:要初始化的字符串
*返回:String对象指针
*/
extern String NewString(char * str);

/*
*功能:将str2附加到str1后面,如果容积够不就重新申请,然后改变指针指向
*      str1只能之堆内存
*参数:str1:String 对象 str2:新的字符串
*返回:String对象指针
*/
extern String Append(String *str1, char * str2);
/*
*功能:将str字符串插入到str1的position位置,自动调整大小到合适
*     str1只能之堆内存
*参数:str1:原始String对象 str:新的要插入的字符串 position:位置index
*返回:String原始对象指针
*/
extern String Insert(String str1,const char * str,int position);
/*
*功能:分割字符串功能,将给定的str按照str1分割,返回一个Array数组
*     str既可以是栈内存 也可以是堆内存
*参数:str:要分割的String对象 str1:分割符字符串
*返回:String对象指针
*/
extern Array * Split(char *str,char * str1);
/*
*功能:字符串的替换功能,替换会引起容积的变化,如果新的字符串比原有的多,有可能会申请新内存
*     但是老的内存会自动释放,并将str指针指向新的内存。
*参数:str:原始字符串 olds:要被替换的字符串,news:新的字符串
*返回:String对象指针
*/
extern String Replace(String *str,char * olds,char * news);
/*
*功能:去掉字符串所有的空格,该字符串既可以是堆内存也可以是栈内存
*参数:str:原始字符串
*返回:String对象指针
*/
extern String Trim(char * str);
/*
*功能:去掉字符串左边所有的空格,该字符串既可以是堆内存也可以是栈内存
*参数:str:原始字符串
*返回:String对象指针
*/
extern String TrimLeft(char * str);
/*
*功能:去掉字符串右边所有的空格,该字符串既可以是堆内存也可以是栈内存
*参数:str:原始字符串
*返回:String对象指针
*/
extern String TrimRight(char *str);
/*
*功能:字符串c在str中第一次出现的位置Index
*     该字符串str既可以是堆内存也可以是栈内存
*参数:str:原始字符串 c:要查找的字符串
*返回:位置Index
*/
extern int IndexOf(char *str,char * c);
/*
*功能:字符串c在str中最后一次出现的位置Index
*参数:str:原始字符串 c:要查找的字符串
*返回:位置Index
*/
extern int LastIndexOf(char * str,char * c);
/*
*功能:字符串的容积长度
*参数:str:原始字符串
*返回:容积的大小
*/
extern int Length(String str);
/*
*功能:字符串的长度
*参数:str:原始字符串
*返回:字符串的长度
*/
extern int StringLength(char *str);
/*
*功能:回收字符串
*参数:str:原始字符串
*返回:无
*/
extern void StringFree(String str);
/*
*功能:判断两个字符串是否相等,字符串既可以是栈内存也可以是堆内存
*参数:str1:原始字符串1,str2:原始字符串2
*返回:是否相等
*/
extern int Equal(char *str1,char *str2);
/*功能:截取字符串
*     str既可以是栈内存,也可以是堆内存
*参数:str:原始字符串 begin:开始位置索引 end:结束位置索引
*返回:字符串
*/
extern String SubString(char * str,int begin,int end);


#ifdef    __cplusplus
}
#endif

#endif    /* _STRINGS_H */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值