您的位置:首页 > 其它

部分字符串的实现函数

2012-04-07 22:24 375 查看
一些字符串的实现函数,没有经过测试,可能有些函数还存在一些错误,有时间再改。

/*****************************************************
*  函数说明:
*           进行字符串拷贝
*  函数参数:
*           const char *src -源字符串
*           char *dest -目标字符串
*  返回值:
*          返回目标字符串的地址
*****************************************************/
char *strcpy_yl(const char *src,char *dest)
{
assert(src!=NULL && dest!=NULL);
int len=strlen(src);
char *address=dest;
if (dest<(src+len))
{
char *psrc=src+len-1;
char *pdest=dest+len-1;
while(len--)
{
*pdest-- = *psrc--;
}
*(dest+len)='\0';
return address;
}
else
{
while(len--)
{
*dest++ = *src++;
}
*dest='\0';
return address;
}
}

/*******************************************************
*  函数说明:
*           寻找字符串中目标字符第一次出现的位置
*  函数参数:
*           const char *str -字符串
*           char c -目标字符
*  返回值:
*           如果存在,返回目标字符的位置;不存在则返回-1
*********************************************************/
int strchr_yl(const char *str,char c)
{
assert(str!=NULL);
size_t len=strlen(str);
int i;
for (i=0;i<len;i++)
{
if (str[i]==c)
{
return i;
}
}
return -1;
}

/*************************************************************
*  函数说明:
*           对两个字符串进行比较
*  函数参数:
*          const char *str1 -待比较的字符串1
*          const char *str2 -待比较的字符串2
*  返回值:
*          如果字符串1大于字符串2,则返回1;如果字符串1等于字符串2,则返回0;否则返回-1
***************************************************************/
int strcmp_yl(const char *str1,const char *str2)
{
assert(str1!=NULL && str2!=NULL);
while(*str1 && *str2 && *str1==*str2)
{
str1++;
str2++;
}
return (*str1-*str2>0)? 1: (*str1-*str2==0)? 0: -1;
}

/*************************************************************
*  函数说明:
*           字符串连接
*  函数参数:
*          const char *src -源字符串
*          char *dest -目标字符串
*  返回值:
*          返回字符串连接后的字符串的指针
***************************************************************/
char *strcat_yl(const char *src,char *dest)
{
assert(src!=NULL && dest!=NULL);
char *pdest=dest;
while(dest!='\0')
{
dest++;
}
while((*dest++=*src++)!='\0');
return pdest;
}

/****************************************************************
*  函数说明:
*           求字符串的长度
*  函数参数:
*           const char *str -待求的字符串
*  返回值:
*           返回字符串的长度
****************************************************************/
size_t strlen_yl(const char *str)
{
assert(str!=NULL);

size_t len=0;
while(*str!='\0')
{
len++;
str++;
}
return len;
}

/*************************************************************
*  函数说明:
*           将src所指向的count个字节复制到dest指向的内存块
*  函数参数:
*           void *dest -目标指针
*           const void *src -源指针
*           size_t count -要复制的字节数
*  返回值:
*           返回目标地址
**************************************************************/
void *memcpy_yl(void *dest,const void *src,size_t count)
{
assert(dest!=NULL && src!=NULL);

void *pdest=dest;
while(count--)
{
*(char *)dest=*(char *)src;
src=(char *)src+1;
dest=(char *)dest+1;
}

return pdest;

}

/************************************************************
*  函数说明:
*          将字符串转换为整型
*  函数参数:
*          string str -待转换的字符串
*  返回值:
*         返回转换后的整型
*************************************************************/
int str2int_yl(string str)
{
assert(str.length()>0);
int pos=0;
int sign=1;
if (str[pos]=='+')
{
pos++;
}
else if (str[pos]=='-')
{
sign=-1;
pos++;
}

int num=0;
while(pos<str.length())
{
assert(str[pos]>='0' && str[pos]<='9');
num=10*num+(str[pos]-'0');
assert(num>=0);
pos++;
}

num=num*sign;
return num;
}

/*******************************************************
*  函数说明:
*          找字符串中第一个只出现一次的字符串
*  函数参数:
*          const char *str -待求的字符串
*  返回值:
*          返回找到的字符串,如果不存在则返回字符'\0'
*******************************************************/
char FindNotRepeatChar(const char *str)
{
if (str==NULL)
{
return '\0';
}
const int SIZE=256;
int table[SIZE]={0};

char pstr=str;
while(*pstr!='\0')
{
table[*pstr]++;
pstr++;
}

while(*str!='\0')
{
if (table[*str]==1)
{
return *str;
}
str++;
}

return '\0';
}

/******************************************************************
*  函数说明:
*         字符串中寻找子串
*  函数参数:
*         const char *string -待求字符串
*         const char *substring -子串
*  返回值:
*         返回子串的位置
********************************************************************/
int strstr_yl(const char *string,const char substring)
{
assert(string!=NULL && substring!=NULL);

size_t len1=strlen(string);
size_t len2=strlen(substring);

int i,j=0;
for (i=0;i<len2;i++)
{

if (string[j]!=substring[i])
{
j++;
i=0;
}
else
{
j++;
}

if (j>len1-len2)
{
return -1;
}

}

if (i==len2)
{
return j-len2;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐