字符串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);
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会编程的小江江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值