字符串API自定义实现
字符串常用API分析请参考:字符串常用API
1. 字符串基础API
1. puts
void myputs(char *p)
{
while(*p!='\0') //判断是否到结尾了
{
putchar(*p++); //逐个打印
}
putchar('\n');
}
2. gets
int mygets(char *str)
{
int cnt=0;
if(str==NULL)
{
printf("内存非法");
return 0;
}
while(*str=getchar()) //逐个获取
{
if(*str=='\n') //回车,获取结束
return cnt;
else //指针偏移,个数+1
{
cnt++;
str++;
}
}
}
3. strlen
int mystrlen(char *p)
{
int cnt=0;
while(*p++!='\0') //判断是否到结尾了
cnt++; //长度+1
return cnt;
}
4. memset
void myMemset(char *p,char c,int size)
{
while(size--)
{
*p++=c; //逐个赋值
}
}
2. 字符串操作API
1. strcpy
char *myStrcpy(char *des,char *src)
{
if(des==NULL || src==NULL) //判断是否为空
return NULL;
else
{
while(*src!='\0') //判断是否到结尾了
{
*des++=*src++; //逐个赋值
}
*des='\0'; //字符串结束标志
}
return des;
}
char *mystrncpy(char *des,char *src,int n)
{
if(des==NULL || src==NULL)
return NULL;
else
{
while(*src!='\0'&& n>0)
{
*des++=*src++;
n--;
}
*des='\0';
}
return des;
}
2. strcmp
int myStrcmp(char *s1,char *s2)
{
int ret=0;
while(!(ret=*s1-*s2)&&*s2) //判断是否相等且某个字符串是否为空
{
s1++;
s2++;
}
if(ret<0)
ret=-1;
else if(ret>0)
ret=1;
return(ret);
}
3. strcat
void myStrcat(char *des,char *src)
{
while(*des!='\0') //移到结尾
{
des++;
}
while(*src!='\0') //拼接上去
{
*des++=*src++;
}
*des='\0'; //字符串结束标志
}
void myStrncat(char *des,char *src,int n)
{
while(*des!='\0')
{
des++;
}
while(*src!='\0' && n>0)
{
*des++=*src++;
n--;
}
*des='\0';
}
4. strlwr
char *myStrlwr(char *str)
{
if(str==NULL) //判断是否为空
return NULL;
char *p=str;
while(*p!='\0')
{
if(*p>='A'&&*p<='Z') //判断是否为大写
*p=(*p)+0x20; //转小写
p++;
}
return str;
}
5. strupr
char *myStrlwr(char *str)
{
if(str==NULL)
return NULL;
char *p=str;
while(*p!='\0')
{
if(*p>='a'&&*p<='z') //判断是否为小写
*p=(*p)-0x20; //转大写
p++;
}
return str;
}
6. strchr
char *myStrchr(char *str, char c)
{
while(*str!='\0' && *str!=c) //判断是否结束、是否存在字符c
{
str++;
}
return *str==c? str : NULL; //是否为空
}
7. strstr
char *myStrstr(char *str, char *substr)
{
char *cp=str;
char *s1, *s2;
if (!*substr)
return str;
while(*cp) //是否为空
{
s1 =cp;
s2 =substr;
while (*s1 && *s2 && !(*s1 - *s2)) //是否相等
{
s1++;
s2++;
}
if(!*s2) //找到
return(cp);
cp++;
}
return(NULL);
}