C语言专题1——用自己的方式实现字符串函数

    字符串函数是可以对字符串进行一系列操作的函数,通常需要调用#include <string.h>来实现对字符串的一系列操作,下面先分别介绍:
 1、strlen函数
 头文件:#include <string.h>;
 函数形式:size_t strlen(const char *s);
 功能:统计字符串的长度,到\0截止,计算结果从返回值返回;
 返回值:size_t (unsigned int),返回字符串的真实长度,计算结果不计算\0。
 当然,因为是自带的库函数,直接进行调用是十分方便的,我们希望通过C语言的学习能够用自己的方式对这样一些库函数进行功能上的模仿,这不失为一种好的学习方法。
//一种实现strlen函数的方式
#include <stdio.h>
int my_strlen(char *s);//函数声明,形参是指向字符串首地址的字符指针

int main(int argc, const char *argv[])
{
	char buf[128];
	gets(buf);//输入需要计算长度的字符
	
	printf("%d\n",my_strlen(buf));//输出字符的长度,在printf函数中直接调用my_strlen的返回值
	return 0;
}

int my_strlen(char *s)//形参*s现在存储的是buf的首地址
{
	int len = 0;
	while(*s != '\0')//字符串遇到\0结束,因此当字符串不等于\0时,执行计数,*s指向下一个字符
	{
		len++;
		s++;
	}
	return len;
}

2、strcpy函数
 头文件:#include <string.h>;
 函数形式:char *strcpy(char *dest, const char *src);
 功能:将src(源内容)拷贝到dest(目的地)中(连同\0一起拷贝);
 返回值:char *: 返回dest的首地址
*注意:
1.strcpy会对dest的内容进行覆盖,并且dest不能是字符串常量,复制的本质也是给一组变量赋值。
2.需要保证dest的空间足够大,分析至少需要大于src本身,不然会出现数组越界,也就相当于把一个长的铅笔放置到短的文具盒里。
3.不能进行字符串的自拷贝。
//一种实现字符串复制的函数
#include <stdio.h>
char *my_strcpy(char *dest, char *src);//这里形参需要定义两个字符串的指针,分别指向源和目的地

int main(int argc, const char *argv[])
{
	char dest[128];
	char src[128];
	char *s = NULL;//定义*s指向字符串的首地址,输出时候使用
	gets(dest);
	gets(src);
	
	s = my_strcpy(dest,src);//s = address
	puts(s);
	return 0;
}


char *my_strcpy(char *dest, char *src)
{
	char *address = dest;//标记原始地址
	
	while(*src != '\0')
	{
		*dest = *src;//复制语句
		dest++;
		src++;
	}
	*dest = '\0';//要在目的地最后补一个字符串结束标志
	return address;
}
3、strcat函数
 头文件:#include <string.h>;
 函数形式:char *strcat(char *dest, const char *src);
 功能:把源字符串src,连接到目标字符串dest的末尾;
 返回值:dest存储的首地址;
*注意:
1.src会把dest末尾的'\0'覆盖,并把自己的'\0'带过去,实现真正意义上的拼接。
2.需要保证dest的空间足够大,分析至少需要大于src+dest本身,不然会出现数组越界。
3.不能进行字符串的自拼接。
//一种字符拼接函数的实现方式
#include <stdio.h>
char *my_strcat(char *dest,const char *src);

int main(int argc, const char *argv[])
{
	char dest[128];
	char src[128];
	char *s = NULL;
	
	gets(dest);
	gets(src);
	s = my_strcat(dest,src);
	puts(s);

	return 0;
}

char *my_strcat(char *dest,const char *src)
{
	char *address = dest;//src向dest后拼接,dest在前
	while(*dest)
	{
		dest++;//略过dest的长度
	}
	while(*src)
	{
		*dest = *src;将源拼接在dest后
		dest++;
		src++;
	}
	*dest = '\0';//补充一个字符串结束标志
	return address;
}
4、strcmp函数
 头文件:#include <string.h>;
 函数形式:int strcmp(const char *s1, const char *s2);
 功能:逐字比较两个字符串s1和s2,本质是比较两个字符串的ascii码是否相同。当遇到'\0'或者两边字符不一样时返回结果。
 返回值:
当s1 > s2 时  返回正整数  1
当s1 < s2 时  返回负整数  -1
当s1 == s2 时  返回0
以上。


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页