字符串函数----篇章(1)

news/2024/10/28 17:58:59/

目录

补上章缺失的两道题

七.笔试题(7)

八.笔试题(8)

一.字符串函数 ( 1 )----strlen函数

二.字符串函数 ( 2 )----strcpy函数

2-1模拟实现strcpy

三.字符串函数 ( 3 )----strcmp函数

​编辑

 3-1模拟实现strcmp

四.字符串函数 ( 4 )----strcat函数

​编辑

 4-1模拟实现strcat


猫猫跟你说,每天进步一点点,在未来的某一天,一定会看到见到!!

人只有坚持把自己变好,就真的会越来越好!!

补上章缺失的两道题

七.笔试题(7)

#include <stdio.h>
//阿里的笔试题
int main()
{char* a[] = { "work","at","alibaba" };char** pa = a;pa++;printf("%s\n", *pa);return 0;
}

如上图,a是一个字符指针数组,*a指向的是数组首元素地址,因为 **pa=a,所以将数组首元素地址传递给二级指针 pa ,接着pa++,就是第二个字符指针的地址

在printfh中对pa进行了一次解引用就是a的第二个元素,也就是at,用%s打印就是at

八.笔试题(8)

    

int main()
{char* c[] = { "ENTER","NEW","POINT","FIRST" };char** cp[] = { c + 3,c + 2,c + 1,c };char*** cpp = cp;printf("%s\n", **++cpp);printf("%s\n", *-- * ++cpp + 3);printf("%s\n", *cpp[-2] + 3);printf("%s\n", cpp[-1][-1] + 1);return 0;
}

如图所示,c对应的是字符指针数组,cp对应的是*c,,上图紫色线表示cp所对应的元素,*cpp=cp,*cpp对应的是首元素地址元素,c+3

printf("%s\n", **++cpp);

cpp++ 对应的是 c+2 , *cpp为cp,*cp对应的是c,所以** ++cpp按照%s打印为 POINT

printf("%s\n", *-- * ++cpp + 3);
注意,这个++cpp是在上一个printf的基础上进行的,*(cpp++)就是c+1,如左图* -- *++cpp所对应的就是ENTER,在这个基础上 +3 对应的就是ER        


printf("%s\n", *cpp[-2] + 3); cpp[-2]也就等于cpp-2 ,(注意:cpp[-2]==cpp-2是固定的,一个是指针形式,一个是数组形式) *(cpp-2)对应的是c+3,再进行解应用操作对应的就是FIRST, ​​​FIRST  + 3对应的就是ST


printf("%s\n", cpp[-1][-1] + 1);也就等于*(*(cpp-1)-1)+1,*(cpp-1)对应的是c+2,*(*(c+2)-1)就是NEW,在这个基础上+1就是E


指针笔试题还是很有难度的,大家还是要多看几遍,尽量理解透彻!!!!!!!!

下面进入本章正题

一.字符串函数 ( 1 )----strlen函数

由于本字符串函数以前提过,博主在这里就不多做解释了 

二.字符串函数 ( 2 )----strcpy函数

通俗点说:strcpy函数就是将逗号后面(源数组)的字符串复制粘贴到逗号前面(目标数组)

注意:1.前面的数组 (目标数组)可能没有'\0',所以逗号后面的数组(源数组)必须有'\0'

           2.前面的数组(目标数组)的空间要足够大,保证能放下后面数组(源数组)的字符串

           3.前面的数组(目标数组)要可变

int main()
{char arr1[20] = {0};char arr2[] = "HELLO";strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}

打印出来是 HELLO 

就是将arr2中的HELLO拷贝到arr1中

2-1模拟实现strcpy

#include <assert.h>
//
//strcpy函数返回的是目标空间的起始地址
//
char* my_strcpy(char*dest, const char* src)
{char* ret = dest;assert(dest && src);while (*dest++ = *src++){;}return ret;
}int main()
{char arr1[20] = { 0 };char arr2[] = "abc";/*my_strcpy(arr1, arr2);printf("%s\n", arr1);*///两种写法都可以printf("%s\n", my_strcpy(arr1, arr2));return 0;
}

三.字符串函数 ( 3 )----strcmp函数

stcmp函数用来比较两个字符串 

上面翻译的很详细,就不做多余的解释了

int main()
{char arr1[] = "abq";char arr2[] = "abc";if (strcmp(arr1, arr2) > 0){printf(">\n");}else{printf("<=\n");}return 0;
}

 输出  >

 3-1模拟实现strcmp

int my_strcmp(const char* str1, const char* str2)
{assert(str1 && str2);while (*str1 == *str2){if (*str1 == '\0')return 0;str1++;str2++;}return *str1 - *str2;
}int main()
{char arr1[] = "abq";char arr2[] = "abc";if (my_strcmp(arr1, arr2) > 0){printf(">\n");}else{printf("<=\n");}return 0;
}

 输出  >

四.字符串函数 ( 4 )----strcat函数

strcat函数用来追加字符串,将逗号后面的数组追加到逗号前面的末尾,从'\0'的位置开始追加

注意:1.逗号后面的数组(源数组)必须有'\0'

        2.前面的数组(目标数组)的空间要足够大,保证能放下后面数组(源数组)的字符串

        3.前面的数组(目标数组)要可变

int main()
{char arr1[20] = "abc";strcat(arr1, arr1);//strncatprintf("%s\n", arr1);return 0;
}

 输出 abcabc

 4-1模拟实现strcat

//strcat函数,返回的是目标空间的起始地址
char* my_strcat(char* dest, const char* src)
{char* ret = dest;assert(dest && src);//1. 找到目标空间的末尾while (*dest != '\0'){dest++;}//2. 数据追加while (*dest++ = *src++){;}return ret;
}int main()
{char arr1[20] = "abc";char arr2[] = "def";my_strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

输出的是  abcdef

记得点个关注,要不然容易找不到!!!!

下一章继续更新字符串函数,敬请期待

如果有解释的不对或者不清晰,麻烦大佬们海涵,如果可以烦请从评论区指出,我一定会加以修改,万分感谢

最后麻烦大佬们动一下你们的小手一键三连,万分感谢


http://www.ppmy.cn/news/1119177.html

相关文章

【openwrt学习笔记】miniupnpd学习笔记

目录 一、参考资料二、upnp基本概念三、miniupnpd3.1参数说明3.1.1 config upnp 的配置参数表3.1.2 config perm_rule 许可设置配置参数表 3.2 windows上使用miniupnpc工具3.3 关于开启upnp功能后无法添加端口 四、其它知识补充4.1 NAT4.1.1 NAT概念4.1.2 NAT的分类 4.2 NAT穿透…

2023年浙工商MBA新生奖学金名单公布,如何看待?

浙工商MBA项目官方最新公布了2023年的非全日制新生奖学金名单&#xff0c;按照政策约定&#xff0c;共分为特等奖学金1名&#xff0c;一等奖学金10名&#xff0c;二等奖学金15名&#xff0c;三等奖学金30名&#xff0c;额度对应3万、1万、0.8万、0.5万不等&#xff0c;主要名单…

短视频矩阵系统,短视频矩阵源码技术开发

开发短视频矩阵系统的源码需要以下步骤&#xff1a; 确定系统需求&#xff1a;根据客户的需求&#xff0c;确定系统的功能和特点&#xff0c;例如用户注册登录、视频上传、视频浏览、评论点赞等。 设计系统架构&#xff1a;根据系统需求&#xff0c;设计系统的整体架构&#x…

Flutter flutter.minSdkVersion的实际文件位置

Flutter 项目的Android相关版本号配置&#xff1a; flutter.minSdkVersion 的版本号配置文件实际路径&#xff1a; …/flutter_sdk/packages/flutter_tools/gradle/src/main/groovy/flutter.groovy Flutter版本号如下&#xff1a; bzbMacBook-Pro ccsmec % flutter --version …

CTF —— 网络安全大赛(这不比王者好玩吗?)

前言 随着大数据、人工智能的发展&#xff0c;人们步入了新的时代&#xff0c;逐渐走上科技的巅峰。 \ ⚔科技是一把双刃剑&#xff0c;网络安全不容忽视&#xff0c;人们的隐私在大数据面前暴露无遗&#xff0c;账户被盗、资金损失、网络诈骗、隐私泄露&#xff0c;种种迹象…

java实现对指定的敏感词汇进行过滤

项目中需要做到所发文章、评价进行敏感词过滤&#xff0c;用最原始的字符串循环过滤很显然效率不太行&#xff0c;然后查找资料看到DFA算法&#xff08;有限状态机&#xff09;&#xff0c;感觉可以用来实现敏感词过滤。 原理&#xff1a;基于状态转移来检索敏感词&#xff0c;…

第二章 进程与线程 十二、进程同步与进程互斥

目录 一、进程同步 1、定义 二、进程互斥 1、定义 2、四个部分 3、原则 一、进程同步 1、定义 进程同步是指在多个进程之间协调执行顺序的一种机制&#xff0c;使得进程按照一定的顺序执行&#xff0c;以避免出现不一致的情况。常见的实现方式有信号量、管程、屏障等。…

CMake教程-第 2 步 添加一个库

CMake教程-第 2 步 添加一个库 1 CMake教程介绍2 学习步骤Step 1: A Basic Starting PointStep 2: Adding a LibraryStep 3: Adding Usage Requirements for a LibraryStep 4: Adding Generator ExpressionsStep 5: Installing and TestingStep 6: Adding Support for a Testin…