c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror

承接上文:(5条消息) c语言字符串函数上:strlen、strcpy、strcat_vpurple__的博客-CSDN博客
 


目录

1.strcmp 字符串比较函数

1.1strcmp使用方法

1.2strcmp 模拟实现

2.长度受限制的字符串函数介绍

2.1 strncpy

2.1.1strncpy基础使用

2.1.2注意事项

2.2strncat

2.2.1strncat的基础使用

2.2.2注意事项

2.3strncmp

2.3.1注意事项

3.字符串查找

3.1strstr

3.1.1strstr的基础使用

3.1.2strstr模拟实现

3.2strtok切割字符串

3.2.1strtok的基础使用

3.2.2 注意事项

4.错误信息报告

4.1strerror

4.1.1 strerror的演示使用

4.1.2 erron

 5.字符分类函数

6.字符转换函数



1.strcmp 字符串比较函数

比较字符串内容

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

1.1strcmp使用方法

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第1张图片

比较两个字符串时,字符两两比较。


1.2strcmp 模拟实现


#include
#include

int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);//保证指针有效性
	while (*str1 != '\0' || *str2 != '\0')
	{
		if (*str1 - *str2!=0)
		{
			return *str1-*str2;
		}
		str1++;
		str2++;
	}
	return 0;
}


int main()
{
	char arr1[] = { "aihao" };
	char arr2[] = { "nihao" };
	if (my_strcmp(arr1, arr2) == 0)
	{
		printf("=\n");
	}
	else if (my_strcmp(arr1, arr2) > 0)
	{
		printf(">\n");
	}
	else
	{
		printf("<\n");
	}
	return 0;
}

2.长度受限制的字符串函数介绍

先复习一波长度不受限制的字符串函数 strcpy、strcat以及strcmp。

它们都执行到’\0‘。

(2条消息) c语言字符串函数上:strlen、strcpy、strcat_vpurple__的博客-CSDN博客https://blog.csdn.net/vpurple_/article/details/125873390有问题,比如strcpy目标空间的长度不够大的时候,可能会造成下图所示情况:

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第2张图片

 所以C语言提供了相对安全的长度受限制的字符串函数strncpy、strncat、strncmp。


2.1 strncpy

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

2.1.1strncpy基础使用

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第3张图片


2.1.2注意事项

感慨一下:现在才明确了char arr[5]中存储的字符串最多只能存除'\0'以外的4个字符,剩下一个位置是'\0',如果存储5个字符组成的字符串,加上’\0‘就是6个字符,会造成数组访问越界。

1.strncpy只拷贝num个字符从源字符串到目标空间,目标空间中的其余字符保留。

如下所示:

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第4张图片

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

如下所示:

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第5张图片


2.2strncat

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

2.2.1strncat的基础使用

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第6张图片


2.2.2注意事项

1.strncat向目标空间追加规定的字符个数并在末尾补上'\0'.

如下所示:

注下两张图的arr[10]应该改为arr[]

追加之前:

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第7张图片

追加之后:

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第8张图片

2.如果源字符串的长度小于num,则拷贝完源字符串之后,就停止不会追加额外的\0。 

如下所示:

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第9张图片


2.3strncmp

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

2.3.1注意事项

比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。

如下所示:

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第10张图片

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第11张图片


3.字符串查找


3.1strstr

在一个字符串中查找字串的一个函数(在一个字符串查找另外一个字符串)。

char * strstr ( const char *str1, const char * str2);

3.1.1strstr的基础使用

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第12张图片

3.1.2strstr模拟实现



#include
#include

char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	const char* s1 = str1;
	const char* s2 = str2;
	const char* p = str1;
	while (*s1 != '\0')
	{
		if (*s1 == *s2)
		{
			p = s1;
			while (*s1==*s2)
			{
				s1++;
				s2++;
				if (*s2 == '\0')
				{
					return p;
				}
			}
		}
		s1 = ++p;
		s2 = str2;
	}
	return NULL;

}


int main()
{

	char arr1[] = { "[email protected]" };
	char arr2[] = { "qq" };
	char* ret = my_strstr(arr1, arr2);

	if (ret == NULL)
		printf("此串不存在\n");
	else
		printf("%s\n", ret);
	
	return 0;
}

3.2strtok切割字符串

char * strtok ( char * str, const char * sep );

3.2.1strtok的基础使用

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第13张图片

 改进:

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第14张图片


3.2.2 注意事项

1.sep参数是个字符串,定义了用作分隔符的字符集合。

2.第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标 记。

3.strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。

(注: strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)

4.strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串 中的位置。

5.strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标 记。

6.如果字符串中不存在更多的标记,则返回 NULL 指针。


4.错误信息报告


4.1strerror

返回错误码所对应的错误信息。

C语言的库函数,在执行失败的时候,都会设置错误码。比如:0.1.2……

错误码有其对应的错误信息。

char * strerror ( int errnum );

4.1.1 strerror的演示使用

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第15张图片

4.1.2 erron

erron 是C语言设置的一个全局的错误码存放的变量。
只要c语言库函数调用错误,就会把错误码放到erron里面去。

在程序运行过程中如果有多次错误的话,erron记录的是最新的错误码。

strerrno的使用场景

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第16张图片


 5.字符分类函数

头文件: ctype.h

函数 如果他的参数符合下列条件就返回真,不符合就返回假 0
iscntrl 任何控制字符
isspace 空白字符:空格‘ ’,换页‘\f’,换行'\n',回车‘\r’,制表符'\t'或者垂直制表符'\v'
isdigit 十进制数字 0~9 isxdigit 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F
islower 小写字母a~z isupper 大写字母A~Z
isalpha 字母a~z或A~Z
isalnum 字母或者数字,a~z,A~Z,0~9
ispunct 标点符号,任何不属于数字或者字母的图形字符(可打印)
isgraph 任何图形字符
isprint 任何可打印字符,包括图形字符和空白字符

6.字符转换函数

 int tolower ( int c );
 int toupper ( int c );

举个例子:

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第17张图片


你好,我是媛仔!很开心你能够看到这路i,终于整理完字符串函数啦,开心!!如果觉得对你有所帮助的话,希望可以点赞评论收藏,最后再来一个大大的关注让更多的人看到就好啦!!祝你天天开心^-^

c语言字符串函数下:strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror_第18张图片

你可能感兴趣的:(c语言进阶之路,c++,开发语言,c语言)