常见字符串函数总结

  • 字符数组的输入和输出

scanf printf  gets puts fgets fputs      //此处不赘述

  • 字符串长度函数:

    size_t strlen( const char *string)

//递归和非递归分别实现strlen
int MyStrlen1(const char *str)//计数器
{
 assert(str);
 int count = 0;
 while (*str)
 {
 str++;
 count++;
 }
 return count;
}
int MyStrlen2(const char *str)//递归
{
 assert(str);
 if (*str=='\0')
 return 0;
 else
 return 1 + MyStrlen(str + 1);
}
int MyStrlen3(const char *str)//指针相减代表所隔元素
{
 const char *p = str;
 while (*p)
 {
 p++;
 }
 return p - str;
}
  • 字符串复制函数:

    char *strcpy( char *strDestination, const char *strSource );//返回值为char*目的为  链式调用(支持链式表达式)

    char *strncpy( char *strDest, const char *strSource, size_t count );

strcpy函数的实现

//1.参数顺序
//2.函数的功能,停止条件
//3.assert
//4.const修饰指针
//5.函数返回值
char *my_strcpy(char *dest, const char*src)
{ 
 char *ret = dest;
 assert(dest != NULL);
 assert(src != NULL);
 
 while((*dest++ = *src++))
 {
  ;
 }
 return ret;
}

strncpy的实现

  • 字符串连接函数:

    char *strcat( char *strDestination, const char *strSource );

 

char *my_strcat(char *dest, const char*src)

{
	assert(dest);
	if (src == NULL)
	{
		return dest;
	}
	char*p = dest;
	while (*dest)
	{
		dest++;
	}//代码走到这里说明dest此时指向/0的位置
	while (*src)
	{
		*dest = *src;
		dest++;
		src++;
	}//代码走到这里说明此时src指向/0的位置

	return p;//返回char*类型指针p目的--链式调用
}
char *my_strcat(char *dest, const char*src)//上代码还可改进一下

{
	assert(dest);
	if (src == NULL)
	return dest;
	char*p = dest;
	while(*dest++!='\0');//dest多加了一步
            dest--;
	while(*dest++=*src++);两个指针多加一步,但对结果无影响

	return p;
}

 

char *strncpy( char *strDest, const char *strSource, size_t count );

  • 字符串比较函数:

    int strcmp( const char *string1, const char *string2 );

功能: 用来比较两个字符串

参数: s1、s2为两个进行比较的字符串

返回值: 若s1、s2字符串相等,则返回零;若s1大于s2,则返回大于零的数;否则,则返回小于零的数。

说明: strcmp()函数是根据ACSII码的值来比较两个字符串的;strcmp()函数首先将s1字符串的第一个字符值减去s2第一个字符,若差值为零则继续比较下去;若差值不为零,则返回差值。  直到出现不同的字符或遇’\0’为止。

特别注意: strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。

int my_strcmp(const char* str1, const char* str2)

{        assert(str1);

	assert(str2);

	while (*str1 == *str2)

	{    if (*str1 == '\0')

		{

			return 0;

		}

		str1++;

		str2++;

	}

	//比较

	if (*str1 > *str2)

	{

		return 1;

	}

	else

	{

		return -1;

	}
}

 

  • strstr

char *strstr( const char *string, const char *strCharSet );

char * mystrstr(char* str1,char* str2)

{

char *start =str1;

assert(str1);

assert(str2);

while (*start != '\0')

{

char* s1 = start;

char* s2 = str2;

while (*s1&&*s2&&*s1 == *s2)

{

s1++;

s2++;

}

if (*s2 == '\0')

{

return start;

}

start++;//satrt 不等于0且s1!=s2;

}

return NULL;//到这里说明主串走完还没找到,返回NULL

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

little-peter

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

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

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

打赏作者

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

抵扣说明:

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

余额充值