str系列函数

最近遇到很多str系列的函数,于是将他们整理了一下:


1.strlen

函数原型:unsigned int strlen(const char *str)

函数功能:计算字符串中包含字符的个数

特点:遇‘\0’停止计数

<span style="font-family:SimSun;font-size:18px;"><span style="font-size:18px;">unsigned int my_strlen(const char* a)
{
	int count = 0;     
	assert(a);	
	while (*a++)
	{
		count++;         //字符串计数
	}
	return count;

}
int main()
{
	char a[] = "wuqhiqw";
	int len = my_strlen(a);
	printf("%d", len);
	return 0;
}</span></span>


2、strcpy

函数原型:char* strcmp( char* dest,char* src)

函数功能:将字符串1的内容拷贝到字符串2中

特点:遇到'\0'停止

<span style="font-family:SimSun;font-size:18px;"><span style="font-size:18px;">void my_strcpy(char* dest, const char* src)
{
	assert(src);
	while (*dest++ = *src++)     //循环拷贝
	{
		;
	}
}
int main()
{
	char src[] = "nuqhwd";
	char dest[20] = { 0 };
	my_strcpy(dest, src);
	printf("%s\n", dest);
	return 0;
}</span></span>


3、strcat

函数原型:char* strcat(char* dest,char* src)

函数功能:连接两个字符串,将字符串src连接到字符串dest的后面

<span style="font-family:SimSun;font-size:18px;"><span style="font-size:18px;">void my_strcat(char *dest, char *src)
{
	while (*dest)
	{ 
		*dest++;                  //让dest走到'\0'位置
	}

	while (*src)
	{
		*dest++ = *src++;          //拷贝
	}
	*dest = '\0';
}
int main()
{
	char dest[20] = "asjdiq";
	char src[] = "ni9io";
	my_strcat(dest,src);
	printf("%s\n", dest);
	return 0;
}</span></span>

4、strstr

函数原型:char*(const char* dest,const char* src)

函数功能:在字符串中dest中查找字符串src,若找到返回src出现的位置指针,若没有找到则返回空指针

<span style="font-family:SimSun;font-size:18px;">char* my_strstr(const char *dest, const char*src)
{
	assert(dest);
	assert(src);
	for (int i = 0; dest[i] != '\0'; i++)
	{
		int tmp = i;                               //保存指针位置
		int j = 0;
		while (src[j++] == dest[i++])
		{
			if (src[j] == '\0');               //对比字串完毕
			return dest+tmp;
		}
		i = tmp;                                   //还原指针
	}
	return NULL;
}
int main()
{
	char a[]= "huacqwopa";
	char b[] = "acq";
	printf("%s\n", my_strstr(a, b));
	return 0;
}</span>


5、strcmp

函数原型:int strcmp(const char* dest,char*src)

函数功能:逐个比较两个字符串,若两个字符串完全相同返回0,否则返回第一个不相同的字符的ascii相减值

<span style="font-family:SimSun;font-size:18px;">int my_strcmp(const char *dest, const char* src)
{
assert(dest);
assert(src);
	while (*dest == *src)
	{
		if (*dest == '\0')
			return 0;                   //字符串相等
		dest++;
		src++;

	}
	return *dest - *src;                       //字符串不相等
}


int main()
{
	char a[] = "agygwduasd";
	char b[] = "abcaudha";
	int ret = my_strcmp(a, b);
	if (ret == 0)                            //根据返回值判断
	{
		printf("a = b \n");
	}
	else if (ret > 0)
	{
		printf("a > b \n");
	}
	else
	{
		printf("a < b \n");
	}
	return 0;
}</span>

6、strchr

函数原型:char* strchr(const char*str ,char c)

函数功能:在字符串str查找第一次出现字符'c'的位置,若找到返回该字符所在位置的指针,若找不到返回空指针

<span style="font-family:SimSun;font-size:18px;">char* my_strchr(char* str, char c)
{
	while ((*str != '\0') )
	{
		if (*str=='c')             //找到字符
		return str;
		str++;
	}
	return NULL;
}
int main()
{
	char* str = "shduquhcc";
	printf("%s", my_strchr(str,'c'));
	system("pause");
	return;
}</span>

7、strrchr

函数原型;char* my_strrchr(char *str, char c)

函数功能:在字符串str中查找最后一次出现字符'c'的位置,若找到返回该字符所在位置的指针,若找不到返回空指针

<span style="font-family:SimSun;font-size:18px;">char* my_strrchr(const char *str, char c)
{
	int count = 0;
	while (*str != '\0')
	{
		*str++;                                   //先让指针指向最后一个字符
		count++;
	}
	for (int i = 0; i < count; i++)
	{
		if (*(--str) == 'c')                     //逆向查找
			return str;
	}
	return NULL;
}
int main()
{
	char* str = "hsbdcicknoccwedqw";
	printf("%s", my_strrchr(str,'c'));
	system("pause");
	return 0;
}</span>


8、strdup

函数原型:char* my_strdup(const char* str)

函数功能:将字符串str中的内容拷贝到新建字符串中,并返回指向新建字符串的指针,若操作失败则返回空指针

<span style="font-family:SimSun;font-size:18px;">int main()
{
	char* str = "hsbdcicknoccwedqw";
	printf("%s", my_strrchr(str,'c'));
	system("pause");
	return 0;
}

char* my_strdup(const char* str)
{
	char* cs = (char*)malloc(100);    //动态开辟内存
	char* ps = cs;                    //保存指针位置   
	while (*str != '\0')
	{
		*cs++ = *str++;
	}
	*cs = '\0';
	return ps;
}
int main()
{
	char *str = "ajsdiuqh";
	printf("%s\n", my_strdup(str));
	free(my_strdup(str));              //释放空间
	return 0;
}
</span>


9、strrev

函数原型:void my_strrev(char* str)

函数功能:逆转字符串

<span style="font-family:SimSun;font-size:18px;">void my_strrev(char* str)
{
	int len = strlen(str);
	char* left = str;                       //设定左下标
	char* right = str + len-1;              //设定右下标
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;                   //左右交换内容
		left++;
		right--;
	}
}

int main()
{
	char str[] = "abcdef";
	my_strrev(str);
	printf("%s", str);
	system("pause");
	return 0;
}
</span>











  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值