C语言进阶字符函数和字符串函数(下)

简介: C语言进阶字符函数和字符串函数(下)


二、库函数模拟实现



2.1 模拟实现strlen


方法一


int my_strlen ( const char * str )
{
   int count = 0 ;
   while ( * str )
   {
      count ++ ;
      str ++ ;
   }
   return count ;
}


方法二


int my_strlen ( char * s )
{
      char * p = s ;
      while ( * p != ‘\0’ )
              p ++ ;
      return p - s ;
}


2.2 模拟实现strcpy


char * my_strcpy ( char * dest , const char* src )
{
    char * ret = dest ;
    assert ( dest != NULL );
    // 使用时包含头文件assert.h,用于中止程序执行(如果使用空指针作为属性进行调用)
    assert ( src != NULL );
    while (( * dest ++ = * src ++ ))
    {
        ;
     }
    return ret ;
}


2.3 模拟实现strcat


char * my_strcat ( char * dest , const char* src )
{
   char * ret = dest ;
   assert ( dest != NULL );
   assert ( src != NULL );
   while ( * dest )
   {
      dest ++ ;
   }
   while (( * dest ++ = * src ++ ))
   {
      ;
   }
   return ret ;
}


2.4 模拟实现strstr


char *   strstr ( const char * str1 , const char * str2 )
{
        char * cp = ( char * ) str1 ;
        char * s1 , * s2 ;
        if ( !* str2 )
            return (( char * ) str1 );
        while ( * cp )
      {
                s1 = cp ;
                s2 = ( char * ) str2 ;
                while ( * s1 && * s2 && ! ( * s1 -* s2 ) )
                        s1 ++ , s2 ++ ;
                if ( !* s2 )
                        return ( cp );
                cp ++ ;
      }
        return ( NULL );


2.5 模拟实现strcmp


int my_strcmp ( const char * src , const char * dst )
{
        int ret = 0 ;
       assert ( src != NULL );
        assert ( dest != NULL );
        while ( ! ( ret = * ( unsigned char * ) src - * ( unsigned char * ) dst ) && * dst )
                ++ src , ++ dst ;
        if ( ret < 0 )
                ret = - 1 ;
        else if ( ret > 0 )
                ret = 1 ;
        return ( ret );
}


2.6 模拟实现memcpy


void * memcpy ( void * dst , const void * src , size_t count )
{
        void * ret = dst ;
       assert ( dst );
        assert ( src );
        /*
        *从较低地址复制到较高地址
        */
        while ( count -- )
       {
                * ( char * ) dst = * ( char * ) src ;
                dst = ( char * ) dst + 1 ;
                src = ( char * ) src + 1 ;
       }
        return ( ret );
}


2.7 模拟实现memmove


b755dcc74d3e4bb29283b47896892fd4.png



void* my_memmove(void* dest,void* str, size_t num)
{
    void* ret = dest;
    assert(dest && str);
    //从低地址复制到高地址(前—>后)
    if (dest<str)
    {
        while (num--)
        {
            //*dest、*str类型不确定(char*)强制转化为(最小的地址空间)
            *(char*)dest = *(char*)str;
            dest = (char*)dest+1;
            str = (char*)str+1;
        }
    }
    else//从高地址复制到低地址(后—>前)
    {
        while (num--)
        {
            *((char*)dest + num) = *((char*)str + num);
        }
    }
    return ret;
}      


目录
相关文章
|
2天前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
26 15
|
2天前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
39 24
|
2天前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
39 23
|
2天前
|
存储 编译器 C语言
【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】
算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。如果操作数是浮点数,在 C 语言中是不允许直接进行。的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;注意:每一个数据输出格式为 printf("%4d", i);的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。取余运算要求两个操作数必须是整数类型,包括。开始你的任务吧,祝你成功!
16 1
|
1月前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
75 10
|
1月前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
59 9
|
1月前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
45 8
|
1月前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
55 6
|
1月前
|
存储 C语言 开发者
【C语言】格式化输出占位符及其标志字符详解(基于ISO/IEC 9899:2024)
在C语言中,格式化输出通过 `printf` 函数等格式化输出函数来实现。格式说明符(占位符)定义了数据的输出方式,标准ISO/IEC 9899:2024(C23)对这些格式说明符进行了详细规定。本文将详细讲解格式说明符的组成部分,包括标志字符、宽度、精度、长度修饰符和类型字符,并适当增加表格说明。
46 6
|
1月前
|
存储 C语言
【C语言】输入/输出函数详解
在C语言中,输入/输出操作是通过标准库函数来实现的。这些函数分为两类:标准输入输出函数和文件输入输出函数。
319 6