1. 字符串函数
strcpy:字符串复制
char* strcpy(char* dst,const char* src){
assert(dst!=NULL && src != NULL)
char* ret = dest;
while((*dst++=*stc++)!='\0')
NULL;
return ret;
}
strncpy:字符串按长度复制
strncpy的功能和strcpy相似,只是它复制时多了一个终止条件。即是未遇到原串的’\0’,如果已经复制了n个字符(n为提供的参数长度),复制同样会终止。
char* strncpy(char* dest, const char* src, int len){
assert(dest!=NULL && src!=NULL);
char* address = dest;
while(len-- && *src!='\0')
*dest++=*src++;
*src='\0';
return address;
}
strcmp:字符串比较
int strcmp(const char* s, const char* t){
assert(s!=NULL && t!=NULL);
while(*s && *t && *s==*t){
++s;
++t;
}
return (*s-*t);
}
strncmp
int strncmp(const char* s, const char* t,unsigned int count){
assert(s!=NULL && t!=NULL);
while(*s && *t && *s==*t && count--){
++s;
++t;
}
return (*s-*t);
}
strcat:字符串的链连接
char* strcat(char* strDest, const* strSrc){
assert(strDest!=NULL && strSrc!=NULL);
char* address=strDest;
while(*strDest!='\0')
++strDest;
while((*strDest++ = *strSrc++)!='\0')
NULL;
return address;
}
strncat
char* strncat(char* strDest,const char* strSrc, unsigned int count){
assert(strDest!=NULL && strSrc!=NULL);
char* address=strDest;
while(*strDest!='\0')
++strDest;
while(count-- && *strSrc='\0')
*strDest++ = *strSrc++;
*strDest='\0';
return address;
}
strlen: 字符串的长度
int strlen(const char* str){
assert(str!=NULL)
int len=0;
while(*str++!='\0')
++len;
return len;
}
strstr:字符串匹配
找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。返回该位置的指针,如找不到,返回空指针。
char * strstr (const char * str1,const char * str2){
char *cp = (char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (*cp){
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}
atoi:将字符串转换成整型数
atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时(’\0’)才结束转化,并将结果返回(返回转换后的整型数)。
#include <stdio.h>
#include <assert.h>
int atoi(const char* str) {
int result = 0;
int sign = 0;
assert(str != NULL); // proc whitespace characters
while (*str==' ' || *str=='\t' || *str=='\n')
++str; // proc sign character
if (*str=='-') {
sign = 1;
++str;
}
else if (*str=='+') {
++str;
} // proc numbers
while (*str>='0' && *str<='9') {
result = result*10 + *str - '0';
++str;
}
// return result
if (sign==1)
return -result;
else
return result;
}
itoa:
value:欲转换的数据。string:目标字符串的地址。radix:转换后的进制数,可以是10进制、16进制等
char *itoa(int val, char *buf, unsigned radix) {
char *p;
char *firstdig;
char temp;
unsigned digval;
p = buf;
if(val <0) {
*p++ = '-';
val = (unsigned long)(-(long)val);
}
firstdig = p;
do{
digval = (unsigned)(val % radix);
val /= radix;
if (digval > 9)
*p++ = (char)(digval - 10 + 'a');
else
*p++ = (char)(digval + '0');
}while(val > 0);
*p-- = '\0 ';
do{
temp = *p;
*p = *firstdig;
*firstdig = temp;
--p;
++firstdig;
}while(firstdig < p);
return buf;
}
2. 内存函数
memcpy:内存复制
void *memcpy(void *memTo,const void* memFrom,size_t size){
assert((dst!=NULL)&&(src!=NULL));
char* tempTo=(char*)memTo; //保持menmTo的首地址
char* tempSrc=(char*)memSrc;
while(size-- > 0)
*tempSrc++=*tempTo++;
return src;
}
memset: 设置内存值
void *memset(void* buffer,int c,int count){
assert(src!=NULL)
char* tempSrc=(char*)src;
while(count--)
*tempSrc++=(char)c;
return src;
}