1、字符串拷贝
char *strcpy(char *strDest, const char *strSrc) //形参加const修饰
{
assert((strDest!=NULL)&&(strSrc!=NULL)); //源地址和目的地址加上非0断言
char *p=strDest; //为了保证返回的是*strDest的首地址
while((*strDest++=*strSrc++)!='\0')
{
;
}
return p; //为了实现链式操作,strcpy(strDst,strcat(a,b))
}
2、字符串连接
char *strcat(char *strDest,const char *strSrc) //const参数
{
assert((strDest!=NULL)&&(strSrc!=NULL)); //非零断言
char *p=strDest; //正确返回地址
while(*strDest!='\0')
{
strDest++; //找到连接的位置
}
while((*strDest++=*strSrc++)!='\0')
{
;
}
return p;
}
3、字符串反转
char* strrvs(char *strDest,const char *strSrc) //const参数
{
assert((strDest!=NULL)&&(strSrc!=NULL)); //非零断言
int len=0;
char *p=strDest;
while(*strSrc!='\0')
{
len++;
strSrc++; //*strSrc的长度
}
for (int i=0;i<len;i++)
{
*(strDest+i)=*(strSrc-1-i);
}
*(strDest+len)='\0';
return p;
}
4、字符串比较
int strcmp(const char *p1, const char *p2)
{
int ret;
while(!(ret=*(unsigned char*)p1-*(unsigned char*)p2)&&*p2&&*p1) //循环条件:*p1和*p2均未结束,并且字符差值为零
{
p1++;
p2++;
}
if (ret<0)
ret =-1;
else if (ret>0)
ret=1;
return ret;
}
5、字符串插入
char *strinsert(char *strDest,const char *strSrc,int pos)
{
assert((strDest!=NULL)&&(strSrc!=NULL));
char *p_end,*p_cur,*p, *q=strDest;; /*p_end指向第一个字符串的尾部,p_cur指向被插入的位置*/
p_end=strDest+strlen(strDest)-1;
p_cur=strDest+pos-1;
for(p=p_end;p>=p_cur;p--)
{
*(p+strlen(strSrc))=*p; /*从p_cur到p_end的全部元素后移strlen(strSrc)位,此时p_cur指向的位置就空出来了*/
}
for(int i=0;strSrc[i]!='\0';i++)
{
*p_cur++=*strSrc++; /*把字符串2中的字符插入空出来的位置*/
}
return q;
}
6、字符串转换为整数
int atoi(char *s)
{
int sign=1,m=0;
if(*s=='+'||*s=='-') /*判断是否有符号*/
sign=(*s++=='+')?1:-1; /*用到三目运算符*/
while(*s!='\0') /*对每一个字符进行操作*/
{
m=m*10+(*s-'0');
s++; /*指向下一个字符*/
}
return m*sign;
}