首页 > 其他分享 >c语言字符串函数(strlen strcpy strcat strcmp等使用及模拟)

c语言字符串函数(strlen strcpy strcat strcmp等使用及模拟)

时间:2024-04-06 13:59:28浏览次数:23  
标签:int str2 str1 strcat char strcpy 字符串 include strlen

在编程的过程中,我们经常要处理字符和字符串,为了方便操作字符和字符串,C语⾔标准库中提供了一系列库函数,接下来我们就学习一下这些函数。

目录

1、strlen的使用及模拟实现。

2、strcpy的使用及模拟实现。

3、strcat的使用及模拟实现。

4、strcmp的使用及模拟实现。

5、strncpy的使用及模拟实现。

6、strncat的使用及模拟实现。

7、strncmp的使用及模拟实现。


strlen strcpy strcat strcmp strncpy strncat strncmp函数的头文件为<string.h>

1、strlen的使用及模拟实现。

size_t  strlen ( char * str )

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

• 参数指向的字符串必须要以 '\0' 结束。
• 注意函数的返回值为size_t,是无符号的( 易错 )
• strlen的使⽤需要包含头文件
1、1  strlen函数的使用如下。  

#include<stdio.h>
 #include<stdio.h>
int main()
{
	char arr[] = "hello world";
	printf("%d", strlen(arr));
}

 1、2  strlen函数的模拟实现

#include<stdio.h>
int my_strlen(char* p)
{
	int count=0;
	while (*p++ != '\0')
		count++;
	return count;
}
int main()
{
	char arr[] = "hello world";
	printf("%d", my_strlen(arr));
}

2、strcpy的使用及模拟实现。

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

将源指向的C字符串复制到目标指向的数组中,包括终止空字符(并在该点停止)
• 将源字符串中的 '\0' 拷⻉到目标空间。
• 目标空间必须足够大,以确保能存放源字符串

2、1 strcpy的使用

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[20] = "abcd";
	char str2[] = "hello world";
	strcpy(str1,str2 );
	printf("%s", str1);
	return 0;
}

2、2 strcpy 的模拟。

#include<stdio.h>
char* my_strcpy(char* str1, char* str2)
{
	char* p = str1;//str1的地址进入循环会改变,所以将str1原本的地址记录起来
	while (*str2 != '\0')//str2指向'\0'跳出循环
	{
		*str1++ = *str2++;//将str2一一赋值给str1
	}
	return p;//返回str1的地址
}
int main()
{
	char str1[20] = "abcd";
	char str2[] = "hello world";
	printf("%s", my_strcpy(str1, str2));
	return 0;
}

3、strcat的使用及模拟实现。

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

• 将源字符串的追加到目标字符串中。destinnation的终止字符被source第一个字符覆盖。
•源字符串必须以 '\0' 结束。
•会将源字符串中的 '\0' 拷贝到⽬标空间。
•目标空间必须足够⼤,以确保能存放源字符串。

3、1 strcat的使用

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[20] = "hello";
	char str2[] = "world";
	printf("%s", strcat(str1, str2));
	return 0;
}

3、2 strcat的模拟

#include<stdio.h>
char* my_strcat(char* str1, char* str2)
{
	char* ret = str1;//同上述函数,记录此时str1的地址
	while (*str1 != '\0')//找到str1的终止字符并跳出循环
		str1++;
	while (*str2 != '\0')
		*str1++ = *str2++;
	return ret; //输出str1;
}
int main()
{
	char str1[20] = "hello";//给定字符数组大小
	char str2[] = "world";
	printf("%s", my_strcat(str1,str2));
}

4、strcmp的使用及模拟实现。

int strcmp ( char* str1, char* str2)

•将相对应位置字符的ascii值一一比较
•第⼀个字符串⼤于第二个字符串,则返回大于0的数字。
•第⼀个字符串等于第二个字符串,则返回0。
•第⼀个字符串小于第二个字符串,则返回小于0的数字。

4、1 strcmp的使用

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "abcd";
	char str2[] = "abce";
	printf("%d",strcmp(str1, str2));//strcmp库函数只会输出数字结果,并不会直接输出大小信息
	//若数字为正数,则str1大于str2
	//若数字为0,则str1等于str2
	//若数字为负数,则str1小于str2
}

4、2 strcmp的模拟

#include<stdio.h>
#include<assert.h>
int my_strcmp(char* str1, char* str2)
{
	assert(str1 && str2);//若str1或者str2为空,会弹出警告,增加安全性
	while (*str1 == *str2)
	{
		if (*str1 == '\0')//这里说明str1和str2完全相等
			return 0;
		str1++;
		str2++;
	}
	return *str1 - *str2;//利用两者ASCII的差值直接得出大小
}
int main()
{
	char str1[] = "abcd";
	char str2[] = "abc";
	printf("%d ",my_strcmp(str1, str2));
}

 strncpy strncat strncmp函数与上述函数只有一字之差,作用也大体相似。

n代表了选择性的进行函数操作。

那么下面来学习它们的不同之处吧。

5、strncpy的使用及模拟实现。

char* strncpy (char* destinnation , char* source,size_t num )

拷贝num个字符从源字符串到⽬标空间
•如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个(我看了很多小编的strncpy函数是没有补加0的,需要注意)

5、1 strncpy的使用

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[20] = "abcd";
	char str2[] = "hello world";
	strncpy(str1, str2, 20);
	printf("%s", str1);
	return 0;
}

5、2  strncpy的模拟

#include<stdio.h>
char* my_strncpy(char* str1, char* str2,size_t n)
{
	char* p = str1;//str1的地址进入循环会改变,所以将str1原本的地址记录起来
	int i = n;//记录n原本的值
	while(n--&&*str2!='\0')
	{
		*str1++ = *str2++;//将str2一一赋值给str1
	}
	if(i>strlen(str2))//需要复制的字符数大于str2字符长度时,用0补充
		while (n--)
		{
			*str1++ = '0';
		}
	*str1 = '\0';
	return p;//返回str1的地址
}
int main()
{
	char str1[20] = "abcd";
	char str2[] = "hello world";
	my_strncpy(str1, str2,20);
	printf("%s", str1);
	return 0;
}

6、strncat的使用及模拟实现。

char* strncat (char* destinnation , char* source,size_t num )

.将source的n个字节复制到destination后 

6、1 strncat的使用

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[20] = "hello";
	char str2[] = "world";
	printf("%s", strncat(str1, str2,3));
	return 0;
}

6、2 strncat的模拟

#include<stdio.h>
char* my_strcat(char* str1, char* str2,size_t n)
{
	char* ret = str1;//同上述函数,记录此时str1的地址
	while (*str1 != '\0')//找到str1的终止字符并跳出循环
		str1++;
	while (*str2 != '\0'&&n--)
		*str1++ = *str2++;
	return ret; //输出str1;
}
int main()
{
	char str1[20] = "hello";//给定字符数组大小
	char str2[] = "world";
	printf("%s", my_strcat(str1,str2,3));
}

7、strncmp的使用及模拟实现。

int  strncat (char* destinnation , char* source,size_t num )

 比较str1和str2的前num个字符,如果相等就继续往后比较,最多比较num个字⺟,如果提前发现不一样,就提前结束,大的字符所在的字符串⼤于另外一个。如果num个字符都相等,就是相等返回0

7、1 strncmp的使用

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "abcde";
	char str2[] = "abce";
	printf("%d",strncmp(str1, str2, 4));//strcmp库函数只会输出数字结果,并不会直接输出大小信息
	//若数字为正数,则str1大于str2
	//若数字为0,则str1等于str2
	//若数字为负数,则str1小于str2
}

7、2 strncmp的模拟

#include<stdio.h>
#include<assert.h>
int my_strncmp(char* str1, char* str2,size_t n)
{
	assert(str1 && str2);//若str1或者str2为空,会弹出警告,增加安全性
	while (*str1 == *str2&&--n)//注意这里为--n;
	{
		if (*str1 == '\0')//这里说明str1和str2完全相等
			return 0;
		++str1;
		++str2;
	}
	return *str1 - *str2;//利用两者ASCII的差值直接得出大小
}
int main()
{
	char str1[] = "abcd";
	char str2[] = "abc";
	printf("%d ",my_strncmp(str1, str2,4));
}

看到这里,喜欢作品就留下小红心再走吧 ,能得到你们的支持是我创作的不竭动力。

我会力所能及地与你们分享知识,关注我,下篇学习初步数据结构哦

标签:int,str2,str1,strcat,char,strcpy,字符串,include,strlen
From: https://blog.csdn.net/m0_73107796/article/details/137410483

相关文章

  • c语言:模拟字符串拷贝功能(strcpy),面试题
    面试题:优化中的优化(10分满分)字符串拷贝:是将一个字符串的内容复制到另一个字符串中的操作。运用函数模拟字符串拷贝:(5分)模拟字符串拷贝#include<stdio.h>voidmy_strcpy(char*dest,char*str){ while(*str!='\0') { *dest=*str; str++; dest++; } *dest......
  • strcpy和memcpy的区别
    本质区别strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。strcpy函数源码(C......
  • C++面试,实现memcpy,strcpy这2个函数的功能
    `strcpy`和`memcpy`都是用于内存复制的函数,但它们之间有几个关键的区别:1.**复制的对象**:-`strcpy`主要用于复制字符串,它将从源字符串的起始位置开始复制字符,直到遇到源字符串的空字符('\0'),然后将空字符也复制到目标字符串中,表示字符串的结束。-`memcpy`则是通用的内存复......
  • strlen、length、size、sizeof的应用场景
    1、区别sizeof()的值在编译时即计算好了,参数可以是指针、数组、类型、对象、函数等。sizeof(指针)=指针大小。sizeof(数组名)=数组占用总空间。sizeof(类型)=类型字节对齐后占用总空间。sizeof(函数)=函数的返回类型所占的空间大小。函数的返回类型......
  • 深入解析C++中sizeof和strlen的奥秘:区别、应用与技巧全揭秘!
     sizeof 和 strlen 是C++中用于处理字符串的两个不同的操作符,它们的作用和使用场景有很大的区别。sizeof操作符:区别:sizeof 是一个运算符,不是一个函数,用于获取一个类型或变量的字节大小。对于数组,sizeof 返回整个数组的字节大小。对于指针,sizeof 返回指针本身的......
  • 无涯教程-Redis - STRLEN命令函数
    RedisSTRLEN命令用于获取存储在键(key)处的字符串值的长度,当键包含非字符串值时,将返回错误。STRLENkey-返回值整数回复,键处字符串的长度,如果键不存在,则返回0。STRLENkey-语法以下是Redis SETLEN  命令的基本语法。redis127.0.0.1:6379>STRLENKEY_NAMESTRLE......
  • 字符函数和字符串函数:strcpy、strcat——《初学C语言第36天》
    ////strcat(字符串追加)——>头文件:<string.h>//strcat的功能就是:1.先找到目标字符串的结尾(\0)然后进行2.strcpy拷贝//char*strcat(char*destination,constchar*source)//括号里为两个地址,返回类型char*//destination目的地 source源头,把源头的数据追加到目的地空间的末......
  • C练习——计算字符串长度,实现strlen功能
    strlen是一个库函数,是专门求字符串长度的,只能针对字符串,从参数给定地址向后一直找“\0”,统计“\0”之前出现的字符的个数。现给字符串“abcd”,要求写一个计算此字符串长度的函数 #include<stdio.h>intmy_strlen(chararr[]);//函数声明intmain(){chararr[]=......
  • 在使用strlen() 函数判断一个字符串长度后重新开辟一个内存存放时要+ 1
    typedef struct{    char *id;    char *name;    int score1;    int score2;    int score3;} Stu;intmain(){Stu*stutmp=(Stu*)malloc(sizeof(Stu));if(stutmp==NULL){returnNULL;}charidtmp......
  • CTfpwn攻防世界int_overflow对于strlen的利用以及汇编是神
    分析这题题目已经在暗示用int数据的overflow了,不过不急,先分析一下。保护基本没啥保护,也挺好,适合不用搞太多花里胡哨的泄露,只需理解这题想告诉你的知识。后门函数看到有一个whatisthis函数,正是我们要的catflag函数。main函数login函数main函数里需要的操作很简单,只需输入一个1就......