c/c++:char*定义常量字符串,strcmp()函数,strcpy()函数,寻找指定字符,字符串去空格
c/c++:char*定义常量字符串,strcmp()函数,strcpy()函数,寻找指定字符,字符串去空格
2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出
【8】c/c++:类型限定符,printf输出格式,putchar,scanf,getchar
【9】c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
【10】c/c++:顺序结构,if else分支语句,do while循环语句,switch case break语句
【11】c/c++:for循环语句,分号不可省略,表达式可以省略,猜数字游戏,跳转语句continue,break,避免写goto
【12】c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法
【13】c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩
【14】c/c++:visual studio的代码快捷键,VS设置自定义默认代码,使用快捷键
【15】c/c++:三维数组,字符数组和字符串,统计字符串中字符出现的频次,scanf输入空格,正则匹配表达式
【16】c/c++:gets(),fgets(),puts(),fputs(),strlen(),字符串拼接函数
【17】c/c++:函数的作用,分类,随机数,函数定义,调用,申明,exit()函数,多文件编程,防止头文件重复
【18】c/c++:指针,指针定义和使用,指针大小4字节,野指针,空指针*p=NULL
【19】c/c++:万能指针,泛型指针,const int *p,int const *p,int *const p,const int *const p,指针与数组,p++,
【20】c/c++:指针p+p-p*p/,数组&a+1,指针减指针,指针实现strlen函数,指针的比较运算,指针数组,多级指针
【21】c/c++:栈帧,传值,传址,实参传值给形参,传地址指针给形参
【22】c/c++:数组做函数参数,传入函数的首地址,相当于传址,指针做函数返回值,数组止做c语言中函数的返回值
文章目录
- c/c++:char*定义常量字符串,strcmp()函数,strcpy()函数,寻找指定字符,字符串去空格
- @[TOC](文章目录)
- c/c++:指针和字符串
- 当字符串(字符数组)做函数的参数时,传入地址,但不需要提供长度,骚啊
- c语言手撕代码比较俩字符串大小:strcmp()函数
- 字符串拷贝函数strcpy()函数
- 字符串中找到特定字符ch
- 去掉字符串中的空格,去空格函数
- 总结
文章目录
- c/c++:char*定义常量字符串,strcmp()函数,strcpy()函数,寻找指定字符,字符串去空格
- @[TOC](文章目录)
- c/c++:指针和字符串
- 当字符串(字符数组)做函数的参数时,传入地址,但不需要提供长度,骚啊
- c语言手撕代码比较俩字符串大小:strcmp()函数
- 字符串拷贝函数strcpy()函数
- 字符串中找到特定字符ch
- 去掉字符串中的空格,去空格函数
- 总结
c/c++:指针和字符串
字符串定义,就是字符数组
char ch[]={'a',a='b','\0'};
char ch[]="ab";
char* ch="ab";//数组就是指针,懂?所以就多出一种定义方法来
不过呢,它存了字符串的首个字符地址
而且不需要解引用就能打印这个玩意
他们仨都是定义的字符数组,数组即指针,可以%s直接打印
void f80(void)
{char str1[] = "hello\n";//printf没区别--字符串变量,可修改char* str2 = "hello\n";//定义的是字符串常量,不可修改printf("%s", str1);printf("%s", str2);str1[0] = 'R';str2[0] = 'R';//ggprintf("%s", str1);printf("%s", str2);
}int main(void)
{f80();system("pause");return 0;
}
char* p=“字符串”;
它可以直接%s打印,因为它保存了数组的首地址,数组首地址也是%s直接打印的
所以就不用解引用了
OK
而char*
定义的是字符串常量,不可修改哦!!!
void f80(void)
{char str1[] = "hello";//printf没区别--字符串变量,可修改char m[] = "hello";//printf没区别--字符串变量,可修改char* str2 = "hello";//定义的是字符串常量,不可修改char* n = "hello";//定义的是字符串常量,不可修改printf("%s\n", str1);printf("%s\n", m);printf("%s\n", str2);printf("%s\n", n);//看他们的地址printf("%p\n", str1);printf("%p\n", m);printf("%p\n", str2);printf("%p\n", n);
}
发现了啥,如果是字符数组字符串变量
那地址不同
但是字符串常量char*
他们的地址一样,不管你用啥来指着它
变量可读可写
常量只可以读
当字符串(字符数组)做函数的参数时,传入地址,但不需要提供长度,骚啊
因为每个字符串都有\0结束标记
咱们可以通过\0配合指针来求哦
c语言手撕代码比较俩字符串大小:strcmp()函数
挨个字符比
str1大于str2的话,返回1
str1小于str2的话,返回-1
比较ASCII码
z大
咱们一个个比,只要不等,返回
strcmp(str1,str2);
void f81(void)
{char str1[] = "hello";//printf没区别--字符串变量,可修改char str2[] = "hello";//printf没区别--字符串变量,可修改printf("%d\n", strcmp(str1,str2));//相等返回0
}int main(void)
{f81();system("pause");return 0;
}
自己手撕代码呢?
int mystrcmp(char* str1, char* str2);void f81(void)
{char str1[] = "hello";//printf没区别--字符串变量,可修改char str2[] = "hella";//printf没区别--字符串变量,可修改printf("%d\n", strcmp(str1,str2));//相等返回0printf("%d\n", mystrcmp(str1,str2));//相等返回0
}int mystrcmp(char* str1, char* str2)
{int i = 0;//索引while(1){if (str1[i] == '\0' && str2[i] == '\0') return 0;else if (str1[i] != '\0' && str2[i] == '\0'){return 1;//str1更长}else if (str1[i] == '\0' && str2[i] != '\0'){return -1;//str2更长}else if (str1[i] == str2[i]){i++;//字符相同不管}else if (str1[i] > str2[i]) return 1;else return -1;}}int main(void)
{f81();system("pause");return 0;
}
自己写就要搞清楚,当俩不等长怎么处理
然后考虑字符大小比较,好说
如果是等长的话好说
三目运算即可
\0是很小的
如果你另外一个长的
可能下面的三目运算符直接就可以对比哦
牛逼的算法就是先沟通想清楚,即使不等长,另一个字符也是和\0比
所以可以节约很多代码
int mystrcmp2(char* str1, char* str2)
{int i = 0;while (str1[i] == str2[i]){//相等就不管,i++if (str1[i] == '\0') return 0;//结束了就整体等i++;//不等出去看三目}return str1[i] > str2[i] ? 1 : -1;//大不大
}
这种代码简单又好理解
如果你不用数组操作
而是解引用
直接操作指针呢?
不要i了
int mystrcmp3(char* str1, char* str2)
{while (*str1 == *str2)//直接这个地址解引用,这个字符等吗{//相等就不管,i++if (*str1 == '\0') return 0;//结束了就整体等str1++;//不等出去看三目str1++;//不等出去看三目}return *str1 > *str2 ? 1 : -1;//大不大
}
绝对牛逼
反正都能实现
数组和指针本质一样
只不过一个是取,一个是解引用
字符串拷贝函数strcpy()函数
很简单
void mystrcpy(char* str2, char* str1);
void f82(void)
{char str1[] = "hello";//printf没区别--字符串变量,可修改char str2[] = "hella";//printf没区别--字符串变量,可修改char str3[] = "hella";//printf没区别--字符串变量,可修改strcpy(str2, str1);//str1拷贝给str2mystrcpy(str3, str1);//str1拷贝给str2printf("%s\n", str2);printf("%s\n", str3);
}void mystrcpy(char* str2, char* str1)
{int i = 0;while (1){str2[i] = str1[i];if (str1[i] == '\0') break;//直到结束i++;//别忘了}
}int main(void)
{f82();system("pause");return 0;
}
指针操作也行
void mystrcpy2(char* str2, char* str1)
{while (1){*str2 = *str1;if (*str1 == '\0') break;//直到结束str1++;//别忘了str2++;//别忘了}
}
字符串中找到特定字符ch
char* strpos(char* str1, char ch)
{//字符串中找字符的位置while (*str1){//结束是0,if (*str1 == ch) return &str1;//此刻指针的位置str1++;//否则挪动}return NULL;
}void f83(void)
{char str1[] = "hello";//printf没区别--字符串变量,可修改char ch = 'o';char* res = strpos(str1, ch);printf("%p\n", res);printf("%d\n", '\0');
}
这是返回地址咯
但是返回它的元素下标呢?
int strpos2(char* str1, char ch)
{char* p1 = str1;//字符串中找字符的位置while (*str1){//结束是0,if (*str1 == ch) return str1 - p1;//相对位移str1++;//否则挪动}return -1;
}
这不很简单吗?
就是用指针偏移量来反应o的位置
去掉字符串中的空格,去空格函数
空格就不复制了
反正,申请一个和原始串str1的长度的字符串,然后我们copy即可
我写这个去空格函数空间负责度o(1),时间复杂度o(n)
我不需要另起一个空间,只需要利用ij前后错位关系搞定
反正有空格i++
不会影响j
char* strno_(char* str)
{//咱们就在这一个字符串上操作,原串肯定长一点int i = 0;int j = 0;while (str[i]){if (str[i] == ' ') i++;//去掉空格else{str[j++] = str[i++];//否则后往前copy}}//最后别忘了给strj加\0str[j] = '\0';return str;
}void f84(void)
{char str1[] = "h ello";//printf没区别--字符串变量,可修改char* res = strno_(str1);printf("%s\n", res);
}
总结
提示:重要经验:
1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。
相关文章:

c/c++:char*定义常量字符串,strcmp()函数,strcpy()函数,寻找指定字符,字符串去空格
c/c:char*定义常量字符串,strcmp()函数,strcpy()函数,寻找指定字符,字符串去空格 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c的话, 我所…...

2023年6月DAMA-CDGA/CDGP数据治理认证考试可报名地区公布
2023年4月23日,据DAMA中国官方信息,目前6月DAMA-CDGA/CDGP数据治理认证考试开放报名地区有:北京、上海、广州、深圳、长沙、呼和浩特。目前南京、济南、西安、杭州等地区还在接近开考人数中,打算6月考试的朋友们可以抓紧时间报名啦…...

UDS的0x19服务介绍
什么是 UDS? UEI (Unified Diagnostic Services,统一诊断服务) 是一种在车辆电子控制单元 (ECU) 之间交换诊断信息的标准通信协议,它是OBD-II的某些扩展。利用 UDS 协议,诊断工程师可以访问车辆的各种功能,如读取故障…...

QinQ技术与Portal技术
QinQ 802.1Q-in-802.1Q,是一种扩展VLAN标签技术。在城域网中,需要大量的VLAN来隔离区分不同的用户,但是原有的802.1Q只有12个比特,仅能标识4096个VLANQinQ即在802.1Q的基础上,再增加一层外层标签。使得可以标识4096*40…...

Vue-自定义表单验证(rule,value,callback)详细使用
前言 最近在实际开发中遇到需要验证合同编号是否在数据库已经存在,自定义表单验证。 的表单验证大家都知道form绑定rules,prop绑定值与form.值一样,必填,失去焦点触发 提示信息。 今天我们讲一讲自定义验证规则具体使用场景和它…...

港联证券|TMT板块全线退潮,这些个股获主力逆市抢筹
计算机、电子、传媒、通讯职业流出规模居前。 今天沪深两市主力资金净流出709.92亿元,其中创业板净流出218.36亿元,沪深300成份股净流出187.92亿元。 资金流向上,今天申万一级职业普跌,除了国防军工职业小幅上涨,获主…...

WPF学习
一、了解WPF的框架结构 (第一小节随便看下就可以,简单练习就行) 1、新建WPF项目 xmlns:XML的命名空间 Margin外边距:左上右下 HorizontalAlignment:水平位置 VerticalAlignment:垂直位置 2…...

C#使用WebDriver模拟浏览器操作WEB页面
有时候需要模拟访问页面触发某个功能,可以使用WebDriver来实现这一功能,驱动打开浏览器,并对页面重定向以及对页面写入脚本等操作。 安装Selenium.Chrome,Selenium.Support.UI,Selenium 引入 using OpenQA.Selenium.…...

正则表达式 - 简单模式匹配
目录 一、测试数据 二、简单模式匹配 1. 匹配字面值 2. 匹配数字和非数字字符 3. 匹配单词与非单词字符 4. 匹配空白字符 5. 匹配任意字符 6. 匹配单词边界 7. 匹配零个或多个字符 8. 单行模式与多行模式 一、测试数据 这里所用文本是《学习正则表达式》这本书带的&a…...

银行数字化转型导师坚鹏:银行数字化转型培训方案
目录 一、银行数字化转型培训背景 二、银行数字化转型模型 三、银行数字化转型课程设计思路 四、 银行数字化转型课程基本介绍 五、 银行数字化转型课程设置 六、银行数字化转型课程大纲 七、培训方案实施流程 一、银行数字化转型培训背景 2020年1月3日ÿ…...

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测
多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测 目录 多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-CNN-…...

Shell知识点(一)
1.echo 命令 echo命令的作用是在屏幕输入一行文本,可以降该命令的参数原样输出。 $ echo hello world hello world 如果想要输出的是多行文本,包含换行符,这时就需要把多行文本放在引号里面 $ echo "<HTML><HEAD><TITLE…...

mysql 索引失效、联合索引失效场景和举例
索引失效 假设有一张user 表,表中包含索引 (id); (name); (birthday); (name,age); 对索引字段进行函数操作 select name from user where year(birthday) 2000;使用模糊查询,查询中使用通配符 select name from user where name like %益达%;使用i…...

快速将PDF转换为图片:使用在线转换器的步骤
PDF文件是一种常见的文档格式,但在某些情况下需要将其转换为图片格式,例如将PDF文件插入PPT演示文稿中。此时,使用在线PDF转换器是一种快速且简便的方法。 本文将介绍如何使用在线转换器将PDF文件转换为图片格式。 步骤1:选择合…...

什么是gpt一4-如何用上gpt-4
怎么使用gpt-4 目前GPT-4还未正式发布或公开,因此也没有详细的对接说明。但是我们可以根据GPT-4的前身GPT-3的应用经验,以及GPT-4的预期功能推测一些可能的使用步骤: 选择适合的GPT-4实现技术:GPT-4可能有不同的实现技术ÿ…...

Docker 相关概念
1、Docker是什么? 如何确保应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复? 答案就是使用容器。Docker之所以发展如此迅速,也是因为它对…...

STM32平衡小车 TB6612电机驱动学习
TB6612FNG简介 单片机引脚的电流一般只有几十个毫安,无法驱动电机,因此一般是通过单片机控制电机驱动芯片进而控制电机。TB6612是比较常用的电机驱动芯片之一。 TB6612FNG可以同时控制两个电机,工作电流1.2A,最大电流3.2A。 VM电…...

动态加载 JS 文件
动态加载JS文件是指在网页运行过程中通过JavaScript代码向页面中动态添加外部JS文件,这种方式能够提高页面加载速度和用户体验,并且可以帮助网站实现更多的功能和特效。 本文将详细介绍动态加载JS文件的基本原理、优势、注意事项以及具体实现方法&#…...

14、lldb调试指令
LLDB LLDB(Low Lever Debug): 默认内置于Xcode中的动态调试工具.标准的lldb提供了一组广泛的命令,旨在与老版本的GDB命令兼容.除了使用标准配置外,还可以很容易地自定义lldb以满足实际需要. 1.1 lldb语法: <command> [<subcommand> [<subcommand>...]] &l…...

浏览器缓存策略:强缓存和协商缓存
浏览器缓存:其实就是在本地使用的计算机中开辟一个内存区,同时也开辟一个硬盘区,作为数据传输的缓冲区,然后利用这个缓冲区来暂时保护用户以前访问的信息通常浏览器的缓存策略分为两种:强缓存和协商缓存,强…...

2023年Chat GPT 应用前景分析
从2022年12月初刚上线至今,不到半年时间ChatGPT月活就超过了1亿用户!可谓火的一塌糊涂,比尔盖茨都称:ChatGPT的历史意义重大,不亚于PC或互联网诞生。以至于ChatGPT官网长期都处于满负荷运转的状态! 由于Ch…...

并发计算公式
常用并发数计算公式:N[(n0.8SP)/(T0.2)]*R 其中: n为系统用户数; S为每个用户发生的业务笔数(QPS); P为每笔业务所需要访问服务器的时间,单位为秒; T为使用业务的时间,单…...

“华为杯”研究生数学建模竞赛2020年-【华为杯】E题:能见度估计与预测(附获奖论文及python代码实现)
目录 摘 要: 一、问题背景与问题重述 1.1 问题背景 1.2 问题重述...

Arduino学习笔记3
一.RGB三色小灯实验 1.源代码 int rgb_R11;//接到板子上面的PWM口11 R int rgb_G9;//接到板子上面的PWM口9 G int rgb_B10;//接到板子上面的PWM口10 B void setup() {pinMode(rgb_R,OUTPUT);//设置rgb_R的控制口为输出模式pinMode(rgb_G,OUTPUT);//设置rgb_G的控制口为输出模…...

BPMN2.0 任务-用户任务
“用户任务(user task)”用于对需要人工执行的任务进行建模。当流程执行到达用户任务时,会为指派至该任务的用户或组的任务列表创建一个新任务。 用户任务用左上角有一个小用户图标的标准任务(圆角矩形)表示。 用户任务在XML中如下定义。其中id是必须属性,name是可选属性…...

David Silver Reinforcement Learning -- Markov process
1 Introduction 这个章节介绍关键的理论概念。 马尔科夫过程的作用: 1)马尔科夫过程描述强化学习环境的方法,环境是完全能观测的; 2)几乎所有的RL问题可以转换成MDP的形式; 2 Markov Processes 2.1 Mark…...

项目结束倒数2
今天,解决了,多个点的最短路问题 用的dfs,配上了floyed计算出的广源距离 难点是要记录路线,dfs记录路线就很烦 但是好在结束了,经过无数的测试,确保没啥问题(应该把) 来看看我的代码 void dfs(int b[], int x, int* sum, int last, int sums, int a[], BFS& s, Floyd_A…...

VBA智慧办公9——图例控件教程
如图,利用VBA进行可视化交互界面的设计,在界面中我们用到了label,button,text,title等多个工具,在进行框图效果的逐一实现后可进行相应的操作和效果实现。 VBA(Visual Basic for Applications&a…...

Presto VS Spark
环境配置 5个节点,每个节点10G内存。 测试SQL,每个执行3次,求平均,对比计算性能。 版本信息 Spark:2.3.1Presto: 0.208 10亿量级查询性能对别 Spark: spark-sql> select sex,count(1) from conta…...

为什么我们能判断声音的远近
想象一下,当我们走在路上时,听到了头顶的鸟儿在树梢间的叫声,即使无法透过浓密的树叶看见它,也可以大致知道鸟儿的距离。此时身后传来由远到近自行车铃铛声,我们并不需要回过头去看,便为它让开了道路。这些…...