字符串API自定义实现

字符串API自定义实现

  • 1. 字符串基础API
    • 1. puts
    • 2. gets
    • 3. strlen
    • 4. memset
  • 2. 字符串操作API
    • 1. strcpy
    • 2. strcmp
    • 3. strcat
    • 4. strlwr
    • 5. strupr
    • 6. strchr
    • 7. strstr

字符串常用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);
}

你可能感兴趣的:(C语言,c语言,字符串)