字符函数和字符串函数

这篇具有很好参考价值的文章主要介绍了字符函数和字符串函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

1.求字符串长度 strlen

1.1 strlen

size_t strlen ( const char * str );

字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。

参数指向的字符串必须要以 '\0' 结束。
注意函数的返回值为size_t,是无符号的( 易错 )
学会strlen函数的模拟实现

 字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 strlen是一个库函数,是用来求字符串的长度的,len1和len2的值是一样的,因为str是char*类型的指针,指向的是a的地址。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{
	const char* str = "abcdef";
	size_t len1 = strlen("abcdef");
	size_t len2 = strlen(str);
	printf("%d\n", len1);
	printf("%d\n", len2);
	return 0;
}

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 需要注意的是strlen遇到\0就会停止统计,假设我们在c的后面放上\0,那么答案就是3.


 我们需要注意的是strlen的返回值是size_t,是无符号数,所以-3被认定为无符号数,最高位的1被认为是正数,所以结果是>=0。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{
	//两个无符号数相减得到的还是无符号数
	//  3             - 6
	//-3
	//10000000000000000000000000000011
	//11111111111111111111111111111100
	//11111111111111111111111111111101
	//
	if (strlen("abc") - strlen("abcdef") > 0)
		printf(">=\n");
	else
		printf("<\n");
	return 0;
}

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习


2.长度不受限制的字符串函数 strcpy strcat strcmp 

 2.1 strcpy

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

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

源字符串必须以 '\0' 结束。
会将源字符串中的 '\0' 拷贝到目标空间。
目标空间必须足够大,以确保能存放源字符串。
目标空间必须可变。
学会模拟实现。

strcpy这个库函数的作用是 将指向的 C 字符串复制到目标指向的数组中,包括终止的 null 字符(并在该点停止)。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{
	char arr1[20] = {0};
	char arr2[] = "HELLO";
	strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 如果我们这样使用strcpy的话,就会出错,因为p里面存放的是常量字符串,是不能被修改的。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{
	char* p = "abcdefghi";
	char arr2[] = "HELLO";
	strcpy(p, arr2);//err
	printf("%s\n", p);
	return 0;
}

2.2 strcat

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

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

源字符串必须以 '\0' 结束。
目标空间必须有足够的大,能容纳下源字符串的内容。
目标空间必须可修改。 

 strcat这个库函数的参数跟strcpy是一样的。这个库函数运行的第一步应该是找到目标字符串的末尾,也就是\0,找到之后再把源字符串的内容追加到目标字符串里面去,并且源字符串的\0也会追加过去。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{
	char arr1[20] = "abc";
	char arr2[] = "def";
	strcat(arr1, arr2);
	printf("%s\n", arr1);

	return 0;
}

 字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习


2.3 strcmp

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

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字

 strcmp比较的不是长度,而是对应位置上的字符的大小(ASCII码值)。

如果第一个字符大小相同则进行后面的比较。

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 这里我们需要重要的是strcmp的返回值是int类型,两个参数都是char*的指针,是不能被改变的。

 strcmp规定是:

目标字符串>源字符串则返回>0;

目标字符串<源字符串则返回<0;

目标字符串=源字符串则返回=0;

 但是在vs编译器上分别是1,-1,0。在各个编译器上的返回值是不一样的,满足条件即可。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{
	char arr1[] = "abc";
	char arr2[] = "abq";
	int ret = strcmp(arr1, arr2);
	printf("%d", ret);
	return 0;
}

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

3.长度受限制的字符串函数介绍 strncpy strncat strncmp

3.1strncpy

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

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

 字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 strncpy和strcpy的前两个参数是一样的,只是返回值是char*的指针,返回的是目标字符串。并且strncpy还多了一个参数size_t num,下面这个代码的意思就是将源字符串的前三个字符拷贝到目标字符数组里面去。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{
	char arr1[20] = { 0 };
	char arr2[] = "abcdefghi";
	strncpy(arr1, arr2, 3);
	printf("%s\n", arr1);
	return 0;
}

 字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习


3.2 strncat

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

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 strncat和strcat的区别也是strncat要多一个参数size_t num,num就是我们要在目标字符串里面追加源字符串的字符个数,同时会将\0放在追加后的目标字符串的末尾。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[20] = "abc";
	char arr2[] = "defghi";
	strncat(arr1, arr2, 3);
	printf("%s\n", arr1);

	return 0;
}

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习


3.2 strncmp

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

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 strncmp和strcmp的区别也是strncmp要多一个参数size_t num,num就是两个字符串要比较的字符个数。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[] = "abczef";
	char arr2[] = "abcqw";
	int ret = strncmp(arr1, arr2, 4);
	printf("%d\n", ret);
	return 0;
}

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 因为'z'的ASCII码值大于’q‘,所以返回的是1.


4.strstr

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

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 strstr就是在字符串中查找字符串,且是返回第一次出现的指针,如果没有则返回NULL。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	char arr1[] = "abcdefghiabcdeqghi";
	char arr2[] = "deq";
	char * ret = strstr(arr1, arr2);
	if (ret == NULL)
	{
		printf("找不到\n");
	}
	else
	{
		printf("%s\n", ret);
	}
	return 0;
}

 字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 如果次字符串出现多次,也是返回第一次出现的指针。


5.strtok

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

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 sep参数是个字符串,定义了用作分隔符的字符集合
第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
如果字符串中不存在更多的标记,则返回 NULL 指针。

 strtok是用来切割字符串的,比如说下面这个代码,p里面是分隔符的集合,此时调用strtok函数就会在arr里面去找@,然后改成\0,同时返回z的地址。

#include<string.h>
int main()
{
	char arr[] = "sauxchnajd@yeah.net";
	char* p = "@.";
	char* s=strtok(arr, p);
	printf("%s\n", s);
	return 0;
}

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 strtok函数会改变被操作的字符串,所以我们最好用一个临时拷贝的内容并且可修改,所以使用strcpy将字符串的内容拷贝过来,这个时候想怎么改buf都可以,对arr没有影响。

int main()
{
	char arr[] = "sauxchnajd@yeah.net";
	char* p = "@.";
	char buf[200] = {0};
	strcpy(buf, arr);
	char* s=strtok(buf, p);
	printf("%s\n", s);
	return 0;
}

strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。所以我们如果要找第二个分隔符,我们就进行第二次调用strtok,第一个参数用NULL,这时strtok就会在第一个标记开始往后查找。

int main()
{
	char arr[] = "sauxchnajd@yeah.net";
	char* p = "@.";
	char buf[200] = {0};
	strcpy(buf, arr);
	char* s=strtok(buf, p);
	printf("%s\n", s);
	s = strtok(NULL, p);
	printf("%s\n", s);
	return 0;
}

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 我们再次调用效果和第二次就是一样的了,在标记后往后查找。

int main()
{
	char arr[] = "sauxchnajd@yeah.net";
	char* p = "@.";
	char buf[200] = {0};
	strcpy(buf, arr);
	char* s=strtok(buf, p);
	printf("%s\n", s);
	s = strtok(NULL, p);
	printf("%s\n", s);
	s = strtok(NULL, p);
	printf("%s\n", s);
	return 0;
}

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

如果字符串中不存在更多标记的时候,则返回空指针。 

strtok函数的真正用法是下面这个代码:

当使用p第一次切割arr的时候,如果返回值不是NULL,则打印出s指向的字符串,然后调整阶段就二次调用,使用NULL。这个for循环的初始化部分只执行了一次,因为strtok这个函数只有第一次传的是非空指针,后面都是NULL。

int main()
{
	char arr[] = "sauxchnajd@yeah.net";
	char* p = "@.";
	char buf[200] = {0};
	strcpy(buf, arr);
	char* s = NULL;
	for (s = strtok(buf, p);s!=NULL;s=strtok(NULL,p))
	{
		printf("%s\n", s);
	}
	return 0;
}

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习


6.strerror

char * strerror ( int errnum );

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

strerror这个函数是将错误码翻译成错误信息,返回错误信息的字符串的起始地址 。

那么什么是错误码呢?无论是使用库函数还是进行正规的软件设计的时候都会设计错误码,就是当程序发生错误的时候,会报出错误信息。在C语言中,如果发生错误就会将错误码放在errno的变量中,errno是一个全局变量,可以直接使用。我们如果想知道0,1,2,3这种数字在错误码中代表着上面,那我们就使用strerror来试一下:

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d: %s\n", i, strerror(i));
	}

	return 0;
}

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 但正常的使用方法是发生什么问题我们就将这个问题的错误码传给strerror,然后翻译出来。

这里举一个打开文件的例子,fopen 以读的形式打开文件,如果文件存在,打开成功,如果文件不存在,打开失败。

int main()
{
	FILE* pf = fopen("add.txt", "r");
	if (pf == NULL)
	{
		printf("打开文件失败,原因是:%s\n", strerror(errno));
		return 1;
	}
	else
	{
		printf("打开文件成功\n");
	}
	return 0;
}

 字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习

 这里还有一个函数叫perror,直接打印错误码,所对应的错误信息。可以这样理解,perror == printf + strerror。

int main()
{
	FILE* pf = fopen("add.txt", "r");
	if (pf == NULL)
	{
		perror("打开文件失败"); 
		return 1;
	}
	else
	{
		printf("打开文件成功\n");
	}
	return 0;
}

字符函数和字符串函数,C语言,算法,服务器,前端,c语言,学习


今天的分享到这里就结束啦!谢谢老铁们的阅读,让我们下期再见。文章来源地址https://www.toymoban.com/news/detail-723083.html

到了这里,关于字符函数和字符串函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言 - 字符函数和字符串函数

    目的:学习主要常见字符串和字符串函数,及其部分函数的模拟过程。 C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。 这些函数的使⽤都需要包含⼀个头⽂件是 ctype.h。 这些函数的使⽤⽅法⾮常类似,我们就讲解⼀个函数的事情,其

    2024年02月05日
    浏览(77)
  • C语言:字符函数和字符串函数

    C语言:初识C语言 C语言:分支语句和循环语句 C语言:函数 C语言:数组 C语言:操作符详解 C语言:指针详解 C语言:结构体 C语言:数据的存储 今天来盘一下字符函数和字符串函数。 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常

    2024年02月11日
    浏览(69)
  • C语言——字符函数和字符串函数(二)

    📝前言: 上一篇文章C语言——字符函数和字符串函数(一)对 字符函数和字符串函数 strlen , strcpy 和 strncpy , strcat 和 strncat 进行了初步的讲解 这篇文章主要再讲解几个我们 常用到的其他字符串函数 (附上实例): 1,strcmp和strncmp 2,strstr 🎬个人简介:努力学习ing 📋个

    2024年02月04日
    浏览(49)
  • 进阶C语言-字符函数和字符串函数

    ✅注意事项: 字符串以 \\\'\\0\\\' 作为结束标志, strlen函数 返回的是在字符串中 \\\'\\0\\\' 前面出现的字符个数(不包括 \\\'\\0\\\' ) 参数指向的字符串必须以 \\\'\\0\\\' 结束 注意函数的返回值是 size_t ,是无符号的 ✅运行示例: 🔭1.1.1strlen函数的模拟实现 📖1.计数器法 assert函数 的 作用 是断言,

    2024年02月04日
    浏览(49)
  • 【C语言】字符函数和字符串函数(1)

    #国庆发生的那些事儿# 大家好,我是苏貝,本篇博客带大家了解字符函数和字符串函数,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 求字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查

    2024年02月08日
    浏览(39)
  • 【c语言】字符函数与字符串函数(上)

    大家好呀,今天给大家分享一下字符函数和字符串函数,说起字符函数和字符串函数大家会想到哪些呢??我想到的只有求字符串长度的strlen,拷贝字符串的strcpy,字符串比较相同的strcmp,今天,我要分享给大家的是我们一些其他的字符函数和字符串函数,跟着小张一起去看看吧

    2024年02月13日
    浏览(77)
  • C语言——字符函数和字符串函数(一)

    📝前言: 这篇文章对我最近学习的有关 字符串的函数 做一个总结和整理,主要讲解 字符函数和字符串函数(strlen,strcpy和strncpy,strcat和strncat)的使用方法,使用场景和一些注意事项 (附上实例) 🎬个人简介:努力学习ing 📋个人专栏:C语言入门基础 🎀CSDN主页 愚润求

    2024年02月04日
    浏览(64)
  • C语言字符函数和字符串函数详解

           Hello, 大家好,我是一代,今天给大家带来有关字符函数和字符串函数的有关知识        所属专栏:C语言        创作不易,望得到各位佬们的互三呦 在C语言中有一些函数是专门为字符设计的,这些函数的使用都需要包含一个头文件ctype.h 如:(注:以下函数原型都

    2024年03月20日
    浏览(54)
  • C语言——详解字符函数和字符串函数(二)

    Hi,铁子们好呀!之前博主给大家简单地介绍了部分 字符和字符串函数 ,那么这次,博主将会把这些字符串函数给大家依次讲完! 今天讲的具体内容如下: 6.1.1 strcmp 函数介绍 它的函数原型如下: 具体的函数介绍如下图所示: 从图中我们得知: - 如果第一个字符串 PTR1 大于

    2024年04月10日
    浏览(47)
  • C语言——详解字符函数和字符串函数(一)

    Hi,铁子们好呀!今天博主来给大家更一篇C语言的字符函数和字符串函数~ 具体讲的内容如下: 前言: 在编程的过程中,我们经常要处理字符和字符串,C语言标准库中提供了一系列库函数,接下来我们就学习一下这些函数。 众所周知,C语言中提供了一系列的字符函数,这些

    2024年03月17日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包