字符串拷贝,返回指针是为了实现链式操作,如strlen(strcpy(dst, src)),des需要保证有足够空间
char* strcpy(char* des,const char* src)
{
assert(des!=NULL && src!=NULL);
char* temp = des;
while((*des++ = *src++ )!='\0')
;
return temp;
}
复制字符串的前n个字符
char* strncpy(char* des,const char* src,size_t n)
{
assert(des!=NULL && src!=NULL);
char* temp =des;
while(n-- && (*des++ = *src++) !='\0')
;
*des='\0';//必须加
return temp;
}
字符串比较,p>q则返回整数,p=q返回0,否则返回负数
int strcmp(const char* p, const char* q)
{
assert(p!=NULL && q!=NULL);
while(*p && *q && *q==*p)
{
p++;
q++;
}
return (*p - *q);
}
拼接字符串,注意这里des需要保证有足够的空间char* strcat(char* des,const char* src)
{
assert(des!=NULL && src!=NULL);
char* temp = des;
while(*des != '\0')
des++;
while((*des++ = *src++) != '\0')
;
return temp;
}
查找字符串const char* strstr(const char* str, const char* substr)
{
assert(str!= NULL && substr != NULL);
const char *p,*q,*res;
while(*str!='\0')
{
p = str;
q = substr;
res = p;//保存位置
while(*p ==*q && *p!='\0')
{
p++;
q++;
}
if(*q == '\0')//字符串匹配
return res;
else
str++;
}
return NULL;
}
src所指向的某一块内存中的前n个字节的内容全部设置为c对应的ASCII值
void* memset(void* src,int c,size_t n )
{
assert(src!=NULL);
void* temp =src;
while(n--)
{
*(char*)src=(char)c;
src=(char*)src+1;
}
return temp;
}
从源src所指的内存地址的起始位置开始拷贝n个字节到目标des所指的内存地址的起始位置中void* memcpy(void* des,const void* src,size_t n)
{
assert(des!=NULL && src!=NULL);
void* temp = des;
while(n--)
{
*(char*)des = *(char*)src;
src=(char*)src+1;
des=(char*)des+1;
}
return temp;
}
strcpy和memcpy主要有以下3方面的区别。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。
整数转为字符串
void itoa(int n, char *str)
{
int j=0,k=0;
char buf[100];
if(n==0)
str[k++]='0';
else if(n>0)
{
while(n)
{
buf[j++]=n%10+'0';
n=n/10;
}
}
else
{
n=-n;
while(n)
{
buf[j++]=n%10+'0';
n=n/10;
}
buf[j++]='-';//负数时,需在末尾添加'-'
}
while(j--)
{
str[k++]=buf[j];//由于整数逆序存储在buf[j]中,需重新保存
}
str[k]='\0';//不能省,否则崩溃
}
字符串转化为整数
int atoi(const char* str)
{
const char* p =str;
long num=0;//输入的数可能很大,防止溢出
bool minus=false;
if(*p=='-')//判断正负号
{
p++;
minus=true;
}
if(*p=='+')
p++;
while(*p!='\0')
{
if(*p>='0' && *p<='9')//防止输入中有其他字符
{
num=num*10+(*p++ - '0');
}
else
{
num = 0;
break;
}
}
if(*p=='\0')
{
if(minus)
num=0-num;
}
return num;
}