string库 CHRIS

/*
文件名:communal.h
发布版本:0.12
发布时间:2003.12.16  

*/

#include   <stdio.h>
#include   <string.h>

char   *   strcpyx(const   char   *s1,char   *s2,unsigned   int   StartPos,unsigned   int   len);
char   *   Replace(const   char   *SourStr,char   *DestStr,const   char   *s1,const   char   *s2);
char   *   RStr(const   char   *SourStr,char   *DestStr,unsigned   int   len);
char   *   LStr(const   char   *SourStr,char   *DestStr,unsigned   int   len);
char   *   RTrim(const   char   *SourStr,char   *DestStr);
char   *   LTrim(const   char   *SourStr,char   *DestStr);
char   *   TurnStr2(const   char   *SourStr,char   *DestStr);
char   *   TurnStr(char   *str);
char   *   IntToStr(int   Value,char   *str);
unsigned   int   pos(const   char   *SubStr,const   char   *DestStr);
unsigned   char     istoASCs(unsigned   char*   desBuffer,unsigned   char*   srcBuffer,int   len);
int   StrToEBCD(char   *buf,char   *ucBuffer,int   BufLen);

/*
功能说明:
把s1中从指定位置开始的指定长度字符串复制到s2中
参数说明:
s1:原字符串
s2:目标字符串
s1:复制的起始位置
len:复制长度
返回值:
返回取得的字符串s2
*/
char   *   strcpyx(const   char   *s1,char   *s2,unsigned   int   StartPos,unsigned   int   len)
{
        unsigned   int   i=StartPos;
        for   (i=StartPos;i <StartPos+len   &&   s1[i]!= '/0 ';i++)
        {
                s2[i-StartPos]   =   s1[i];
        }
        s2[i-StartPos]= '/0 ';
        return   s2;
}

/*
功能说明:
替换字符串中指定的内容
参数说明:
SourStr:原字符串
DestStr:替换后的字符串
s1:被替换的子串
s2:替换s1的子串
返回值:
返回替换完成后的字符串
*/
char   *   Replace(const   char   *SourStr,char   *DestStr,const   char   *s1,const   char   *s2)
{
        //尚未完成...
        int   i=0;
        int   j=0;
        DestStr[0]= '/0 ';
        while   (i=pos(s1,SourStr))
        {

                j=i;
        }
        return   DestStr;
}

/*
功能说明:
从右端截取指定长度的字符串
参数说明:
str:原字符串
len:截取长度
返回值:
返回截取指定长度的字符串
*/
char   *   RStr(const   char   *SourStr,char   *DestStr,unsigned   int   len)
{
        int   i;
        int   j=0;
        len   =   len> strlen(SourStr)   ?   strlen(SourStr)   :   len;
        for   (i=strlen(SourStr)-len;   SourStr[i]   !=   '/0 ';   i++)
        {
                DestStr[j]=SourStr[i];
                j++;
        }
        DestStr[j]= '/0 ';
        return   DestStr;
}

/*从左端截取指定长度的字符串*/
char   *   LStr(const   char   *SourStr,char   *DestStr,unsigned   int   len)
{
        if   (len> strlen(SourStr))        
                len=strlen(SourStr);        
        if   (len==0)  
        {
                *DestStr= '/0 ';
        }
        else
        {
                strcpy(DestStr,SourStr);
                *(DestStr+len)= '/0 ';
        }
        return   DestStr;
}

/*截去一个字符串的右端空格*/
char   *   RTrim(const   char   *SourStr,char   *DestStr)
{
        int   i;
        strcpy(DestStr,SourStr);
        for   (i=strlen(DestStr)-1;i> =0;i--)
        {
                if   (DestStr[i]== '   ')  
                        DestStr[i]= '/0 ';
                else
                        break;
        }
        return   DestStr;
}

/*截去一个字符串的左端空格*/

char   *   LTrim(const   char   *SourStr,char   *DestStr)
{
        unsigned   int   i=0;
        int   flag=0;
        for   (i=0;i <strlen(SourStr);i++)
        {
                if   (SourStr[i]== '   ')  
                        i++;
                else
                        break;
        }
        return   strcpyx(SourStr,DestStr,i,strlen(SourStr)-i);
}

/*前后翻转一个字符串*/
char   *   TurnStr2(const   char   *SourStr,char   *DestStr)
{
        int   i;
        int   len=strlen(SourStr);
        for   (i=0;i <len;i++)
        {
                *(DestStr+i)=*(SourStr+len-i-1);
        }
        *(DestStr+len)= '/0 ';
        return   DestStr;
}

/*前后翻转一个字符串*/
char   *   TurnStr(char   *str)
{
        char   temp;
        int   i=0;
        int   j=strlen(str)-1;
        for   (i=0;i <j;i++,j--)
        {
                temp=str[i];
                str[i]=str[j];
                str[j]=temp;
        }
        return   str;
}

/*把一个整数转化为一个字符串*/
char   *   IntToStr(int   Value,char   *str)
{
        int   i=0;
        int   minus=0;//负号
        if   (Value==0)  
        {
                str[i]= '0 ';
                i++;      
        }
        if   (Value <0)
        {
                minus=1;
                Value=abs(Value);
        }
        while   (Value> =1)
        {
                switch   (Value   %   10)
                {
                case   0:str[i]= '0 ';break;
                case   1:str[i]= '1 ';break;
                case   2:str[i]= '2 ';break;
                case   3:str[i]= '3 ';break;
                case   4:str[i]= '4 ';break;
                case   5:str[i]= '5 ';break;
                case   6:str[i]= '6 ';break;
                case   7:str[i]= '7 ';break;
                case   8:str[i]= '8 ';break;
                case   9:str[i]= '9 ';break;
                }
                Value=Value/10;
                i++;
        }
        if   (minus)
        {
                str[i]= '- ';
                i++;
        }
        str[i]= '/0 ';
        return   TurnStr(str);
}


/*
判断SubStr是否包含在DestStr中,
存在返回SubStr第一次出现的位置,不存在返回0
*/
unsigned   int   pos(const   char   *SubStr,const   char   *DestStr)
{
        unsigned   int   i,j;
        for   (i=0;i <strlen(DestStr);i++)
        {
                if   (DestStr[i]==SubStr[0])
                {
                        for   (j=0;j <strlen(SubStr);j++)
                        {
                               
                                if   (j==(strlen(SubStr)-1))
                                        return   i+1;
                                else   if   (DestStr[i+j]!=SubStr[j])
                                        break;
                        }
                }
        }
        return   0;
}

//十六进制转换为压缩BCD码
//   convert   {0x4c,0x5e,0x33}   to   "4c5e33 "
unsigned   char     istoASCs(unsigned   char*   desBuffer,unsigned   char*   srcBuffer,int   len)
{     int   i;
char   ch;
for(i=0;i <len;i++)
{
        ch   =   srcBuffer[i]   > >   4;
        if((ch   > =   0)&&(ch   <=   9))
        {
                desBuffer[2*i]   =   ch   + '0 ';
        }
        else   if((ch   > =10)&&(ch   <=   15))
        {
                desBuffer[2*i]   =   ch   +   55;
        }
        else
                desBuffer[2*i]   =   '* ';
        ch   =   srcBuffer[i]   &   0x0F;
        if((ch   > =   0)&&(ch   <=   9))
        {
                desBuffer[2*i+1]   =   ch   + '0 ';
        }
        else   if((ch   > =10)&&(ch   <=   15))
        {
                desBuffer[2*i+1]   =   ch   +   55;
        }
        else
                desBuffer[2*i+1]   =   '* ';
}
desBuffer[2*i]   =   '/0 ';
return   0;
}


//压缩BCD码转换为十六进制
//89860099---> 0x89,0x86,0x00,0x99

int   StrToEBCD(char   *buf,char   *ucBuffer,int   BufLen)
{ unsigned   char   temp1,temp2;
int   Len=BufLen/2,i;

for   (i=0;i <Len;i++)
{
        temp1=buf[i*2];
        if   (temp1> = 'a ')
                temp1=temp1   -   'a '   +   10;
        if   (temp1> = 'A ')
                temp1=temp1   -   'A '   +   10;
        if   (temp1> = '0 ')
                temp1=temp1- '0 ';
       
        temp2=buf[i*2   +   1];
        if   (temp2> = 'a ')
                temp2=temp2   -   'a '   +   10;
        if   (temp2> = 'A ')
                temp2=temp2   -   'A '   +   10;
        if   (temp2> = '0 ')
                temp2=temp2- '0 ';
        ucBuffer[i]=((temp1&0x0f) < <4)|(temp2&0x0f);
}
return   0;
}

原文地址:https://www.cnblogs.com/chriszsy/p/13216139.html