(Ⅰ)C语言用指针实现冒泡排序、strcat、strcmp、strstr库函数

本文介绍了如何使用C语言的指针实现冒泡排序,并详细讲解了自定义实现strcat、strcmp和strstr这三个字符串处理函数的原理和代码。在冒泡排序中,通过指针避免了额外的变量设置,增强了代码的简洁性。strcat函数需要注意目标字符串有足够的预留空间,strcmp函数返回字符串比较结果,strstr函数则用于查找字符串子串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用指针冒泡排序


为了同数组冒泡排序进行区别,所以我们要用全指针实现冒泡排序

在一般的冒泡排序中

  • 第一层for循环
    规定要进行的数,循环条件为t<数组长度-1
  • 第二层循环
    从第一个元素开始进行相邻元素的交换,直到交换到上次已经交换结束的元素数,通过i<数组长度-1-t来决定每中要交换的次数

通过指针冒泡排序
如果指针也按照上述的方法来进行交换,那么会额外设置变量,繁琐之余并不能体现指针的实现冒泡排序的特点,所以我们只须通过指针来限定循环的趟数和每趟交换的次数

  • 第一层for循环
    得到数组的首元素地址arr以后,创建指针代表每次需要比较的最后一个变量end=arr+数组长度-1,用循环条件 arr<endend--来决定趟数。
  • 第二层for循环
    因为每趟开始都需要从第一个元素开始判断,所以定义一个cur指针变量,循环条件cur<end来决定每交换的次数
代码实现
void bubble_sort(int *arr, int sz)
{
    int *str = arr;//
    int *end = arr + sz - 1;//定义末端元素的位置
    int *cur = arr;//表示当前交换的元素
    for (str = arr; str < end; end--)//确定要交换的次数,通过end的缩小
    {
        for (cur = str; cur < end; cur++)//每次循环重新开始的时候,在初始化部分将cur重置成str
        {
            if (*cur > *(cur + 1))
            {
                int tmp = *cur;
        
好的,我很乐意为您介绍C语言strcpystrcatstrcmpstrstr这几个标准库函数实现方式。这些函数都是操作字符串的常用函数,下面我将逐一为您解释它们的实现原理: 1. strcpy(字符串复制): ```c char *strcpy(char *dest, const char *src) { char *ret = dest; while ((*dest++ = *src++) != '\0'); return ret; } ``` 这个函数逐个字符复制src指向的字符串到dest指向的内存位置,直到遇到字符串结束符'\0'。 2. strcat(字符串连接): ```c char *strcat(char *dest, const char *src) { char *ret = dest; while (*dest != '\0') dest++; while ((*dest++ = *src++) != '\0'); return ret; } ``` 这个函数首先将dest指针移动到字符串末尾,然后将src指向的字符串逐个字符复制到dest的末尾。 3. strcmp(字符串比较): ```c int strcmp(const char *s1, const char *s2) { while (*s1 && (*s1 == *s2)) { s1++; s2++; } return *(unsigned char *)s1 - *(unsigned char *)s2; } ``` 这个函数逐个字符比较两个字符串,直到遇到不同的字符或者字符串结束符。返回值表示两个字符串的关系。 4. strstr(子字符串查找): ```c char *strstr(const char *haystack, const char *needle) { if (!*needle) return (char *)haystack; for (; *haystack; ++haystack) { if (*haystack == *needle && strncmp(haystack, needle, strlen(needle)) == 0) return (char *)haystack; } return NULL; } ``` 这个函数在主字符串(haystack)中查找子字符串(needle)第一次出现的位置。它使用strncmp函数来比较子字符串。 这些实现方式都是标准库函数的基本实现原理。在实际使用中,建议使用标准库提供的函数,因为它们通常经过优化,并且考虑了各种边界情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值