C语言字符串 *** 作函数strcpy、strcat、strcmp的使用介绍和函数实现

C语言字符串 *** 作函数strcpy、strcat、strcmp的使用介绍和函数实现,第1张

strcpy

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

1.源字符串必须以’\0’结束。

2.会将源字符串中的’\0’拷贝到目标空间。

3.目标空间必须足够大,以确保能存放源字符串。

4.目标空间必须可变。

5.学会模拟实现。

char arr[10] = {0};

char arr1[] = {'a','b','c'};

strcpy(arr,arr1);		//错误,arr1字符串没有明确给出'char',拷贝不知何时停止
*= str "***********" ;char

*= p "hello world" ;strcpy

(,str)p;//程序奔溃,因为str指向的是个常量字符串,不能被修改,要求目标空间必须可变		//正常实现,通过指针找到两个数组的同一个下标空间,然后拷贝
strcpy函数实现
void
my_strcpy (char* ,destchar* )srcwhile
{
	( *!=src ')' *=
	{
		*dest ; ++src;
		dest++;
		src}*
	=
	*dest ; //最后是为了将源数组的'}'拷贝到目标数组中src//优化		void
my_strcpy
(
char *,char *dest)while (src*
{
	!= ')'*src ++ =*
	{
		++dest; } *src=*
	;
	}dest //再优化 voidsrcmy_strcpy
(
char
* ,char* )destwhile( *src++
{
	= *++dest) //当*src指向';'时,*dest被赋值后,整个表达式的值为'}','}'的ASCII码是0,退出循环 //加上断言assert,需引入头文件srcvoidmy_strcpy	(
	{
		char
	*
,
char
* )assert( !=destNULL) ;src//条件为真,则没问题,条件为假,则报错,即src不能是NULL
{
	assert(src != NULL);	while
	(*dest ++ =*++
	) ;}dest} 
  • 源字符串必须以"
  • 目标空间必须有足够的大,能容纳下源字符串的内容。
  • ’结束。
  • 目标空间必须可修改。
  • src
  • 返回值类型是char*,是目标空间的首地址
  • 字符串自己给自己追加,如何?(不能自己给自己追加,因为一开始是把源首字符覆盖到目标字符串的’#’位置,自己追加自己时,一开始的’include’就被覆盖了,最后就找不到’char’放到目标字符串的最后了)
  • { * my_strcat (
    strcat

    strcat – 追加

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

      char*,constchar

    从目标字符串的’\0’位置开始追加(包括’\0’),把源字符串的第一位覆盖到目标字符串’\0’的位置,接下来的依次追加,最后把源字符串的’\0’也追加进去,所以目标字符串要有’\0’

    strcat函数实现
    *) 
    assert( &&);char dest* = ;//1.找到目标字符串的'while' src(
    {
    	*!=dest ')' src++;
    	}//找到'//2.将源字符串逐一追加过去,包括'while'' start ( dest*
    	!=
    	')' *=dest * ;++
    	{
    		dest;++
    	;
    	}
    	*
    	= *;src //追加'return' ;}
    	{
    		intdest main (src)
    		destchar[
    		src20]
    	=
    	"hello "dest ; charsrc[	]
    	= start"world"
    ;
    printf ("%s",
    {
    	my_strcat str1(,) ) ;return
    	0 str2;} # includechar
    	*my_strcat(char *,str1const str2char*)
        assert (&&
    )
    

    进阶写法:

    ;char 
    *= ;//1.找到目标字符串的'while'(* dest) ++ ;} src//找到'//2.将源字符串逐一追加过去,包括'while''
    {
    	(*dest ++ src=*
    	++) start ; dest}
    	return
    	; }intdestmain
    	{
    		dest()
    	char
    	[
    	20
    	] ="hello "dest; char [src]=
    	{
    		"world"
    	;
    	printf start(
    "%s"
    , my_strcat(,
    {
    	) str1);return 0 ;}
    	//1.普通写法 str2intmy_strcmp ( constchar
    	*,constchar *)str1while str2(*==
        * )if
    (
    
    strcmp

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

    标准规定︰

    第一个字符串大于第二个字符串,则返回大于0的数字

    第一个字符串等于第二个字符串,则返回0

    第一个字符串小于第二个字符串,则返回小于0的数字

    那么如何判断两个字符串?(比较对应字符的ASCII码值)

    strcmp函数实现
    *
    == ')'return0 ;} str1++ ; ++; str2}
    {
    	//*str1 != *str2 if(str1 * *str2)
    	{
    		return 1;str1 } elsereturn
    		{
    			- 1;
    		}
    		str1}//2.进阶写法
    		str2intmy_strcmp
    	(
    	const
    	char *,str1 > conststr2char
    	{
    		* )assert
    	(
    	&&
    	{
    		) ;//加上断言,两个指针均不能为空while
    	(
    *
    
    ==
    * )if( *== str1')' return 0; str2}
    {
    	++;str1 ++ str2;}		return
    	* -*str1 ; }str2
    	{
    		 str1  
    		{
    			 
    		
    		str1
    		str2
    	
    	 str1  str2		//strcmp函数并没有规定比较结果返回值是1或-1,只是>0或<0都可以
    
    

    欢迎分享,转载请注明来源:内存溢出

    原文地址:https://54852.com/langs/866775.html

    (0)
    打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
    上一篇 2022-05-12
    下一篇2022-05-12

    发表评论

    登录后才能评论

    评论列表(0条)

      保存