C语言:字符串函数,strlen函数,strcpy函数,strcat函数,strcmp函数,strncpy函数,strncat函数,strncmp函数

前言
C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中
或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数.

目录

  • 求字符串长度
    • strlen
      • 模拟实现strlen函数
  • 长度不受限制的字符串函数(只认'\0',有一定的缺陷)
    • strcpy(字符串拷贝)
      • 模拟实现 strcpy函数
    • strcat (字符串追加)
      • 模拟实现strcat 函数
    • strcmp(字符串比较)
      • 模拟实现 strcmp函数
  • 长度受限制的字符串函数
    • strncpy
    • strncat
    • strncmp

求字符串长度

strlen

size_t strlen ( const char * str );

1.字符串已 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。
2.参数指向的字符串必须要以 ‘\0’ 结束。
3.注意函数的返回值为size_t,是无符号的( 易错 )

模拟实现strlen函数

模拟实现 strlen
#include  
#include 
int my_strlen(const char* str)
{
     
	int count = 0;
	assert(str != NULL);
	while (*str != '\0')
	{
     
		count++;
		str++;
	}
	return count;
}
int main()
{
     
	int len = my_strlen("abcdef");
	printf("%d\n", len);
	return 0;
}

注:

#include  
int main() 
{
      
const char*str1 = "abcdef"; 
const char*str2 = "bbb"; 
if(strlen(str2)-strlen(str1)>0) 
{
      
printf("str2>str1\n"); 
} 
else 
{
      
printf("srt1>str2\n"); 
} 
return 0; 
}

C语言:字符串函数,strlen函数,strcpy函数,strcat函数,strcmp函数,strncpy函数,strncat函数,strncmp函数_第1张图片

长度不受限制的字符串函数(只认’\0’,有一定的缺陷)

strcpy(字符串拷贝)

char* strcpy(char * destination, const char * source );

1.Copies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point).
2.源字符串必须以 ‘\0’ 结束。
3.会将源字符串中的 ‘\0’ 拷贝到目标空间。
4.目标空间必须足够大,以确保能存放源字符串。
5.目标空间必须可变。

模拟实现 strcpy函数

模拟实现 strcpy
#include  
#include 
char* my_strcpy(char* dest, const char*src)
{
     
	assert(dest != NULL);
	assert(src != NULL);
	char* ret = dest;
	//拷贝src指向的字符串到dest指向的空间,包含'\0'
	while (*src != '\0')
	{
     
		*dest = *src;
		dest++;
		src++;//拷贝bit
	}
	*dest = *src;//拷贝\0
	//代码改进:
	//while (*dest++ = *src++)
	//{
     
	//	;
	//}
	//返回目的空间的起始值
	return ret;
}
int main()
{
     
	char arr1[] = "abcdefghi";
	char arr2[] = "bit";
	my_strcpy(arr1,arr2);//把arr2拷贝到arr1上并且把/0也拷贝过去了
	printf("%s\n", arr1);
	return 0;
}

strcat (字符串追加)

char * strcat ( char * destination, const char * source ); 

1.Appends a copy of the source string to the destination string. The terminating null character in destination is overwritten by the fifirst character of source, and a null-character is included at the end of
the new string formed by the concatenation of both in destination.
2.源字符串必须以 ‘\0’ 结束。
3.目标空间必须有足够的大,能容纳下源字符串的内容。
4.目标空间必须可修改。
5.字符串自己给自己追加,如何? 答:找不到目标的\0,
6.学会模拟实现

#include  
#include 
int main()
{
     
	char arr1[30] = "hello";
	char arr2[] = "world";
	strcat(arr1, arr2);//arr1内容后面追加一个arr2,其中arr1要足够大,arr2从arr1的\0之后开始追加
	printf("%s\n", arr1);
	return 0;
}

模拟实现strcat 函数

#include  
#include 
char* my_strcat(char*dest,const char* src)
{
     
	char*ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	//1.找到目的字符串的\0
	while (*dest != '\0')
	{
     
		dest++;
	}
	//2.追加
	while (*dest++ = *src++)
	{
     
		;
	}
	return ret;
}
int main()
{
     
	char arr1[30] = "hello";
	char arr2[] = "world";
	my_strcat(arr1, arr2);//arr1内容后面追加一个arr2,其中arr1要足够大,arr2从arr1的\0之后开始追加
	printf("%s\n", arr1);
	return 0;
}

strcmp(字符串比较)

int strcmp ( const char * str1, const char * str2 );

标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
那么如何判断两个字符串?

#include  
int main()
{
     
	char *p1 = "abcdef";
	char *p2 = "sqwer";
	//int ret = strcmp(p1, p2);
	//比较的是对应的字符,一对一对比,对应字符
	//p1>p2 返回一个大于零的数字
	//p1=p2 返回一个等于零的数字
	//p1
	if (strcmp(p1, p2) > 0)
	{
     
		printf("p1>p2\n");
	}
	else if (strcmp(p1, p2) == 0)
	{
     
		printf("p1==p2\n");
	}
	else
	{
     
		printf("p1);
	}
	return 0;
}

模拟实现 strcmp函数

模拟实现 strcmp
#include  
#include 
int my_strcmp(const char* str1, const char* str2)
{
     
	assert(str1 && str2);
	//比较
	while (*str1 == *str2)
	{
     
		if (*str1 == '\0')
		{
     
			return 0;//相等
		}
		str1++;
		str2++;
	}
	if (*str1 > *str2)
	{
     
		return 1;//大于
	}
	else
	{
     
		return -1;//小于
	}
}
int main()
{
     
	char *p1 = "abcdef";
	char *p2 = "aqwer";
	int ret = my_strcmp(p1, p2);
	printf("ret=%d\n", ret);
	return 0;
}

长度受限制的字符串函数

strncpy

char * strncpy ( char * destination, const char * source, size_t num);

1.拷贝num个字符从源字符串到目标空间。
2.如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

int main()
{
     
	char arr1[5] = "abc";
	char arr2[] = "hello bit";
	strncpy(arr1, arr2, 4);//将arr2拷贝到arr1,4代表拷贝的个数限制
	
	return 0;
}

strncat

1.追加num个字符从源字符串到目标空间。
2.如果源字符串的长度小于num,则追加完源字符串之后,在目标的后边补一个’\0’就结束
3。从目标的’\0’开始追加

int main()
{
     
	char arr1[30] = "hello\0xxxxxxxxxxxxxxxxx";
	char arr2[] = "world";
	strncat(arr1, arr2, 8);//在arr1后面追加arr2 ,3表示之追加三个
	printf("%s\n", arr1);
	return 0;
}

strncmp

int strncmp ( const char * str1, const char * str2, size_t num );

标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
C语言:字符串函数,strlen函数,strcpy函数,strcat函数,strcmp函数,strncpy函数,strncat函数,strncmp函数_第2张图片

#include  
#include 
int main()
{
     
	const char* p1 = "abcdef";
	const char* p2 = "abcqwer";
	int ret = strncmp(p1, p2, 3);//各自比较前三个字符
	printf("%d\n", ret);
	return 0;
}

你可能感兴趣的:(c语言,c语言)