代码编织梦想


注:本文介绍函数都需包含指定头文件

一、无字符串长度限制的字符串函数

1. strlen 计算字符串长度函数

1.参数:

size_t strlen ( const char * str );
  • strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。
  • strlen 的函数返回值是size_t,无符号整形
  • strlen 的参数指向的字符串的结尾必须包含’\0’
  • 注意: strlen(“abc”)-strlen(“abcde”) 结果是>0 (-2存到无符号数里 是很大的正数)因此最好用比较,不要相减

2.使用方法:

#include<string.h>
int main()
{
	char arr[] = { "abcde" };
	int n = strlen(arr);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		printf("%c ", arr[i]);
	}
	return 0;
}

3.模拟实现:(此处为计数器办法,还可以用1.指针-指针 2.递归的方式)

size_t mysrtlen(const char* str)
{
	size_t cnt = 0;
	assert(str);
	while (*str != '0')
	{
		cnt++;
		str++;
	}
}
int main()
{
	char arr[] = "abcdef";
	size_t n = my_strlen(arr);
	printf("%u\n", n);
	return 0;
}

2. strcpy 字符串拷贝函数

1.参数:

char* strcpy(char * destination, const char * source );
  • strcpy 拷贝时保证原数据要有’\0’ 所以不能用arr[]={‘c’,‘a’,‘r’,‘o’,‘l’},同时防止数组放不下,越界访问
  • strcpy 会将源字符串中的 ‘\0’ 拷贝到目标空间中
  • 拷贝的目标空间必须足够大
  • 不能拷贝到常量字符串里(char *p=“abc”)

2.使用方法:
strcpy 里的第一个参数是拷贝的目标空间,第二个参数是拷贝的内容

int main()
{
	char arr[20] = { "xxxxxxxxxxxxxxxxxxxx" };
	char x[] = { "hello china" };
	strcpy(arr, x);
	printf("%s", arr);
	return 0;
}

运行结果
3.模拟实现

void my_strcpy(char* dest, const char* src)
{
	assert(dest && src);
	char* ret = dest; //记录一下初始位置
	while (*src)
		*dest++ = *src++;
	return ret;
}
int main(){
	char arr1[] = "abcdef";
	char arr2[20]={0};
	my_strcpy(arr2,arr1);

	return 0;
}

3. strcat 字符串追加函数

1.参数:

char * strcat ( char * destination, const char * source );
  • strcat 的源字符串必须以 \0 为结束标志
  • strcat 的被追加的空间必须能够存放的下追加的字符串
  • strcat 的源字符串必须是可改变的,不能是常量字符串
  • 注意:自己追加自己会怎样?–陷入死循环,因为会把\0覆盖掉,破坏原数据
    在这里插入图片描述

2.使用方法:

int main()
{
	char arr[20] = { "hello " };
	char arr2[] = "china";
	strcat(arr, arr2);
	printf("%s\n", arr);

	return 0;
}

strcat 函数追加会把 arr2 的所有字符串拷贝到arr1里,包括\0
在这里插入图片描述

3.模拟实现

char* my_strcat(char* dest, const char* src)
{
	assert(dest && src);
	char* ret = dest;
	//1.找到目标空间的末尾\0
	while (*dest != '\0')
	{
		dest++;
	}
	//2.拷贝
	while (*dest++ = *src++)
		;
	return ret;
}
int main()
{
	char arr1[] = "hello ";
	my_strcat(arr1, "world");
	return 0;
}

4. strcmp 字符串比较函数

1.参数:

int strcmp ( const char * str1, const char * str2 );
  • strcmp函数判定规则:
    第一个大于第二个,返回大于0的数字
    第一个等于第二个,则返回0
    第一个小于第二个,则返回小于0的数字

  • strcmp 是比较每个字符串的第一个字符, 如果相等,
    则继续比较下一对字符,直到字符不相等或遇到’\0’

2.使用方法:

int main()
{
	char arr[] = { "abcdefg" };
	char str[] = { "abg" };
	int ret = strcmp(arr, str);
	if (ret > 0)
	    printf("arr > str");
	else if (ret < 0)
		printf("arr < str");
	else
		printf("arr == str");

	return 0;
}

3.模拟实现

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;
	//上述if - else可简化为 return(*str1 - *str2);

}

二、 有字符串长度限制的字符串函数

1. strncpy 字符串拷贝函数

1.参数:

char * strncpy ( char * destination, const char * source, size_t num );
  • strncpy 和 strcpy 函数的使用方法相似,只是多了一个参数 size_t num
  • 多出来的参数是来限制字符串拷贝的长度,增加了安全性
  • 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加\0,直到num个

2.使用方法:

int main()
{
	char arr1[25] = { "hello world!" };
	char arr2[] = { "For a better tomorrow!########" };
	strncpy(arr1, arr2, 22);
	printf("%s\n", arr);
	return 0;
}

2. strncat 字符串追加函数

1.参数:

char * strncat ( char * destination, const char * source, size_t num );
  • 和 strcat 函数使用的方法和规则类似,在arr1的后面追加arr2的内容,并会在末尾自动加上\0。只是多了一个参数 size_t num
  • num 这个参数代表需要追加几个字符

2.使用方法:

int main()
{
	char arr[20] = "hello ";
	char* str = "world! For a better tomorrow!";
	strncat(arr, str, 6);
	printf("%s\n", arr);

	return 0;
}

3. strncmp 字符串比较函数

1.参数:

int strncmp ( const char * str1, const char * str2, size_t num );
  • 规则和 strcmp 一样
  • 多出来的一个参数是用来要比较字符串的个数

2.使用方法:比较前3个字符大小

int main()
{
	char arr[] = { "abgefg" };
	char str[] = { "abgaaaa" };
	int ret = strncmp(arr, str,3);
	if (ret > 0)
	    printf("arr > str");
	else if (ret < 0)
		printf("arr < str");
	else
		printf("arr == str");
	return 0;
}

在这里插入图片描述

4. strstr 在字符串中查找另一字符串

1.参数:

char * strstr ( const char *str1, const char * str2);
  • 作用:在A 字符串中查找是否包含 B字符串
  • 如果 A 中包含 B ,则返回 B 在 A 中首次出现的的地址。否则返回空指针。
    因为返回的是地址,所以要用指针变量来接收

2.使用方法:

int main()
{
	char arr[] = { "abcdefg" };
	char str[] = { "cde" };
	char* ret = strstr(arr, str);
	if (ret == NULL)
		printf("没有找到\n");
	else
		printf("%s\n", ret);

	return 0;
}

在这里插入图片描述

5. strtok 切割字符串函数

1.参数:

char * strtok ( char * str, const char * sep );
  • sep参数是个字符串,定义了用作分隔符的字符集合第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
  • strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
  • strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
  • strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
  • 如果字符串中不存在更多的标记(找不到),则返回 NULL 指针 (输出(null))。
    总结:第一次调用传第一个变量首地址,后面几次传NULL就行(怎么记录的?用static保存)
    在这里插入图片描述

2.使用方法:
在这里插入图片描述


三、两个错误码函数

1. strerror 解析错误码函数

1.参数:

char * strerror ( int errnum );

注:需包含头文件<errno.h>

  • 在使用库函数的时候,调用库函数失败时,都会设置错误码
  • C语言中有一个全局变量叫 errno,只要调用库函数发生错误,就会把错误码放到errno里
  • strerror函数会把错误码翻译成对应的错误信息

2.效果展示:

int main()
{
	printf("%s\n", strerror(0));
	printf("%s\n", strerror(1));
	printf("%s\n", strerror(2));
	printf("%s\n", strerror(3));
	printf("%s\n", strerror(4));
	printf("%s\n", strerror(5));
	return 0;
}

在这里插入图片描述
3.使用方法:
一般是 strerror 里放 errno,errno 里存放的是错误码

int main()
{
	FILE* pFile;
	pFile = fopen("test.txt", "r");//打开test.txt,以读的形式打开文件
	if (pFile == NULL) // 打开失败就是空指针
		printf("%s\n", strerror(errno));
		//错误码自动保存在 errno 变量当中
	return 0;
}

2.perror 解析错误码,打印信息

1.参数:

void perror(const char* str);

注:需包含头文件<stdio.h>

  • perror 和 strerror 作用都是一样的,不过strerror 没有打印的效果
  • perror 是把错误码转换成错误信息,再打印

2.使用方法:

int main()
{
	//1. 打开文件失败时,返回NULL
	FILE* pd = fopen("test.txt", "r"); 
	if (pd == NULL)
	{
		perror("错误信息");
		return 1;
	}

	// 2. 读文件
	// .....
	//3. 关闭文件
	fclose(pd);
	pd = NULL;
	return 0;
}

字符操作函数

在这里插入图片描述
注:以上函数需要头文件<ctype.h>


字符转换函数

1.tolower

使用:

#include<ctype.h>
int main()
{
	char arr[20] = { 0 };
	scanf("%s", &arr);
	int i = 0;
	while (arr[i] != '\0')
	{
		if (isupper(arr[i])) //判断是否是大写字母
		{
			arr[i] = tolower(arr[i]);
		}
		printf("%c ", arr[i]);
		i++;
	}
	return 0;
}

在这里插入图片描述

2.toupper

使用:

int main()
{
	char arr[20] = { 0 };
	scanf("%s", &arr);
	int i = 0;
	while (arr[i] != '\0')
	{
		if (islower(arr[i])) //判断是否是小写字母
		{
			arr[i] = toupper(arr[i]); //转换成大写字符
		}
		printf("%c ", arr[i]);
		i++;
	}
	return 0;
}

在这里插入图片描述


总结

注意头文件的使用,使用字符串相关函数都要有<string.h>,两个报错函数不同头文件,字符操作函数和转换函数需要<ctype.h>。
一般使用有字符串长度限制的字符串函数,防止越界报错,提高安全性。
注意思考这些字符串函数自己作用于自己时的情况,结合’\0’考虑。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35904005/article/details/125781050

c语言:模拟实现字符串函数strlen,strcpy,strcat,strcmp,strchr,strstr_yl_sakura的博客-爱代码爱编程

什么是C语言中的字符串 字符串或串(String)是由数字、字母、下划线组成的一串字符。通常放在常量字符串中或者字符数组中。C语言中以 ‘\0’ 来作为字符串的结束标记。 字符的ASCII编码表 1.strlen

实现c语言中的库函数(strlen strcpy strncpy strcat strncat strcmp strncmp)-爱代码爱编程

经常听身边的朋友说去参加公司笔试时会遇到要求实现c语言中的库函数(strlen strcpy strncpy strcat strncat strcmp strncmp),有时会想不起来该如何写,那么我们今天就来实现下这几个库函数。( 如有错误,欢迎指出!!!) 1.strlen(字符串长度) 1 size_t mystrlen(const cha

【C语言】字符串函数的实现(strcpy,strcat,strcmp,strstr,strlen)-爱代码爱编程

str系列字符串函数的实现 strlen函数的实现strcpy函数的实现strcat函数的实现strcmp函数的实现strstr函数的实现 strn系列函数(strncmp , strncpy, strncat)的模拟实现 https://blog.csdn.net/weixin_43939593/article/details/104123855 me

C语言字符串库函数(strlen、strcmp、strcpy、strcat、atoi)全解-爱代码爱编程

C语言中常用的字符串函数有以下几种: 函数格式含义strlen(s)检测字符串实际长度strcmp(s1,s2)比较两个字符串长度strcpy(s1,s2)将s2复制到s1strcat(s1,s2)将s2拼接到s1后面atoi(s1)将字符串转换成整型数一、字符串长度检测 #include <stdio.h> int main() { c

C语言常用字符串函数使用及模拟实现(strlen,strcat,strcpy,strcmp)-爱代码爱编程

一、strlen strlen函数用法:参数只有一个,传入指向字符串首地址的指针,返回该字符串长度(第一个字符到’\0’的长度)注意事项:注意与sizeof(str)的区别,sizeof求大小,包括’\0’,strlen求长度,不包括’\0’。 //size_t strlen ( const char * str );标准库函数声明 sizt_t My

C语言之字符串探究(三):字符串库函数操作——strlen、strcat、strcpy、strcmp-爱代码爱编程

相关博文:C++之char和string字符串类探究相关博文:C语言之数组探究(一):定义、大小、初始化、访问和三要素相关博文:C语言之字符串探究(一):字符串与字符数组相关博文:C语言之字符串探究(二):字符串原生操作——strlen、strcat、strcpy、strcmp自实现相关博文:C语言之字符串探究(三):字符串库函数操作——strlen、st

c语言strcpy两字符串长度不同,(C语言)自己写字符串操作函数(一)——strlen/strcpy/strcat/strcmp/st...-爱代码爱编程

看到很多面试都会要求你写一些简单的字符串操作函数,这些函数看起来挺简单的,但是自己写的时候就会发现不少的问题。所以我自己把大部分的字符串操作函数都写了一遍,然后用了个测试程序来测试自己写的函数与库函数是否相同。包括字符串长度函数、不受限制的字符串函数、受限制的字符串函数、字符串查找基础函数。下面直接上代码: my_string.h 字符串操作函数头文

调用字符串库函数c语言,C语言字符串库函数的实现-爱代码爱编程

1.strlen(字符串的长度) size_t Strlen(const char* str) { assert(str); for (size_t i = ;; ++i) { if (str[i] == '\0') return i; } } size_t StrlenByRecursion(const char* str) {

C语言字符串库函数详解-爱代码爱编程

C语言字符串库函数详解 1.strlen函数:求字符串长度 int main() { char arr1[] = "abc"; char arr2[] = { 'a', 'b', 'c' }; int len1 = my_strlen(arr1); int len2 = strlen(arr2); printf("%d\n", len1);

自个实现的字符串函数(用C语言)strlen,strcmp,strcpy,strcat,strstr;-爱代码爱编程

一、strlen计算字符串长度函数; C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。 C 库函数 – strlen() | 菜鸟教程 (runoob.com) 手写:(三种方法) //1.普通计数法 int my_strlen(const char * st

C语言-常用字符函数详解+模拟实现-爱代码爱编程

 今天是2021年9月21日,首先祝大家中秋节快乐啦!但愿人长久,千里共婵娟。又是一年月圆,祝大家在中秋节都能和你爱的人和爱你的人团圆~ 接下来进入整体啦~ 目录 1.字符函数 strlen() strcpy() strcat() strncpy() strcmp() strncat() strncmp() strstr() str

字符串各种库函数的实现(strlen,strcpy,strcmp,strcat,strstr,memcpy)-爱代码爱编程

strlen的实现 有很多种方法这里用的为指针相减 int my_strlen(const char* str) { assert(str != NULL); char* p=str; while (*p) { p++; } return p - str; } strcpy的实现 char* my_strcpy(const char*

字符串函数strlen的用法实现(strcpy、strcat、strcmp)-爱代码爱编程

文章目录 前言一、求字符串长度strlen二、字符串拷贝函数strcpy三、字符串追加函数strcat四、字符串的比较strcmp总结 前言 本文主要介绍字符函数和字符串函数的使用以及相应的实现过程,进一步加深了解C语言中字符和字符串的相关库函数。 一、求字符串长度 在c语言中,求字符串的长度用 strlen 函数。 st

【C语言-进阶】字符串库函数:strlen strcmp strcat strcpy...模拟实现-爱代码爱编程

三种方法模拟实现strlen // 计数器的方法 size_t my_strlen(const char* str) { assert(str); unsigned ret = 0; while (*str++) ret++; return ret; } //递归的方法 size_t my_strlen(const char* str) {

字符串处理函数(strcpy strcat strcmp strlen)-爱代码爱编程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、字符串复制函数 strcpy二、字符串连接函数 strcat三、字符串比较函数strcmp四、.求字符串长度函数strlen五、字符串分解函数strtok解释为什么要返回char * 前言 由于字符串应用广泛,为方便用户对字符串的处理,C语言库函数

C语言字符串函数操作(strlen,strcpy,strcat,strcmp)详解-爱代码爱编程

文章来源: 学习通http://www.bdgxy.com/ 目录 一.strlen函数模拟二. strcpy函数模拟 三.strcat函数模拟四.strcmp函数模拟总结 一.strlen函数模拟 字符串以‘\0’作为结束标志,strlen函数返回的是在字符串中‘\0’前面出现的字符个数(不包括‘\0’); 有三种方法可以实现该操作

【c语言】字符串函数及模拟实现strlen&&strcpy&&strcat&&strcmp_平凡的人1的博客-爱代码爱编程

✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨一句话:凡是过往,皆为序章 ✨说明: 过去无可挽回, 未来可以改变 文章目录 🔴前言🟠求字符串长度——strlen()1.计数器方法2.指针-指针方法3.递归🟡长度不受限制的字符串函数strcpystrcatstrcmp🟢总结 🔴前言 我们知道,在C语言中对

字符串函数模拟实现(strlen,strcmp,strcat,strcpy)_分别编写实现 strcpy strcmp 和strlen字符串运算函数功能的程序-爱代码爱编程

目录 1.strlen函数 (字符串求长函数) 模拟实现strlen函数 计数器 递归  指针-指针 2.strcmp函数(字符串比较大小函数)  模拟实现strcmp函数 3.strcat函数(字符串追加函数)  模拟实现strcat函数 4.strcpy函数 (字符串拷贝函数) 模拟实现strcpy函数 首先我们要知