【C语言】字符串小练习(每日小细节012)
前言:
欢迎打开这篇博客,从今天开始,每天和大家分享一个C语言小细节,不久之后还会追加C++
一些常常被忽视的小细节和思想统一的编程题目是这个专栏的核心哦
虽然简单但千万别在细节处失分!!!!
每日花一两分钟浏览一下加深一个知识点不香吗
感兴趣的赶紧收藏关注起来吧,不要迷路~
我们今天主要练习一些数组,字符串的小题和编程题,对这部分还不是很了解的小伙伴可以去看数组指针,指针数组一锅粥,二级指针深度理解(附编程题练习)
当然如果很基础的数组知识也有所遗忘的话可以去
一维数组和二维数组的命名以及存储空间
1.
这段代码的输出是什么?
首先s是指针数组,数组的每一个元素是字符串首字母的地址,函数传参之后p就是s的临时拷贝,本质还是一样的,p[1]就代表s中第一个字符串(“ABCD”)的首字母地址,p[i],i每++,就是跳过一个首字母地址,也就是跳过一个字符串,所以p[0],p[1],p[2],p[3]就是字符‘A’‘E’‘I’‘M’的地址
打印以%s的格式,看到s[i](p是s的临时拷贝,没有本质区别)中存放的地址,输出s[i]存储的指针指向的字符串。
所以最后结果就是 字符‘A’‘E’‘I’‘M’ 为首的四个字符串
2.
A:拿到数组第一个元素的地址,a[0][0]代表一个元素,+5就是跳过五个元素,又a数组是3行4列(都是下标从0开始)所以指向a[1][1]的地址,解引用找到
B:a数组除了可以表示一个二维数组的名字还可以把a理解成里面存放四个行向量首元素的地址,也就是每一行第一个元素的地址,所以a后面什么都不加就表示第一行第一个元素的地址,+1跳到下一行(因为指针+-数字是看指针的类型是什么,+-之后就跳过多少个同类型的元素)
*(a+1)解引用来到第二行现在的元素类型变成原数组元素的地址,+1就是找到第二行第二列的元素地址然后解引用就可以
C,D:区别就在要不要&
如果不加&就a[1]表示第二行的首元素地址,直接+1又跳过一个元素,完美找到第二行第二个元素
但是加上&, a[1]就表示a[1][0]的地址,又加上&想表示什么?地址的地址,那么+1就跳过一行,走远了
所以C选项错误
3.
A选项,f(a)传参时,a会退化成指向其首元素的地址,类型是 int*,不符。
B选项,b是二维数组,传参时会退化成指向其首元素的指针,也就是b[0]的地址,b[0]的类型是int [4],故&b[0]类型是int(*)[4],不符。
D选项,&a是数组a的地址,其类型是int(*)[4],不符。
C选项,q是一个指针数组,在初始化时用b[0]、b[1]、b[2], 此时b[0]、b[1]、b[2]会退化成指向各首元素的指针(int* 类型,因此类型符合,可以用它们初始化)。q传参时,退化成指向其首元素的指针,即 int**,符合
4.NC31 第一个只出现一次的字符 牛客传送
不知道大家记不记得之前在刷剑指offer的时候,就有相似的方法是对于字符串吗,用一个大小为128的数组记录每一个字符出现的次数,出现一次就在对应码值下标的位置++,本题也是类似
int FirstNotRepeatingChar(char* str ) {// write code here//int a[128]={0};int a[128]={0};int t=0;for(int i=0;*(str+i)!='\0';i++){t=*(str+i);a[t]++;}for(int i=0;*(str+i)!='\0';i++){t=*(str+i);if(a[t]==1)return i;}return -1;
}
还有一个极其相似的题目
判定字符是否唯一力扣传送
其实就是最后的判断条件不太一样,简直是原题
bool isUnique(char* astr){int a[128] = { 0 };int t = 0;for (int i = 0; *(astr + i) != '\0'; i++){t = *(astr + i);a[t]++;}for (int i = 0; *(astr + i) != '\0'; i++){t = *(astr + i);if (a[t] != 1)return false;}return true;
}
今天的小细节分享就到这里了,希望你真的对二维数组有更多的了解
【C语言】字符串小练习(每日小细节012)相关推荐
- 【C语言】二叉树前序中序后序遍历详解!!!内附算法好题初阶(每日小细节021)
二叉树三种遍历方式时刻牢记,所谓的前中后就是根的位置 前序:根->左子树->右子树 中序:左子树->根->右子树 后序:左子树->右子树->根 每日小细节新增算法好 ...
- C语言笔记含源码(变量、输入输出、分支、循环、函数、数组、指针、字符串、结构体)小总结
文章目录 一.变量与输入输出 二.分支语句 三.循环 四.函数 五.数组 六.指针 七.字符串 八.结构体 一.变量与输入输出 定义变量需要:类型.变量名.变量值(可有可无) #include < ...
- 微信小程序获取的语言列表统计,微信小程序getSystemInfo获取的各种语言都叫什么?微信小程序国际化|多语言版本获取微信小程序语言大全【记录】
微信小程序要做国际化,需通过 wx.getSystemInfo 获取到当前使用的语言,来切换不同的语言包,或许是我没找对地方?查了一下微信手册上没有这个标准语言对照表或者记录啥的,只能自己挨个儿获取一 ...
- 一个特别适合新手练习的Android小项目——每日一妹纸
原文链接 http://sparkyuan.me/ 转载请注明出处 介绍 当前版本V 1.2 刚开始学习Android的时候,主要就是学习了一些Activity的生命周期,各种View和Layout的 ...
- c语言算24点答案,C语言-纸牌计算24点小游戏
C语言实现纸牌计算24点小游戏 利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节 ...
- 【iOS开发每日小笔记(七)】UITextView UITextField 检测并过滤Emoji表情符号
这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己 ...
- C语言你不得不知道的小知识
C语言你不得不知道的小知识: 1: 常见的变量修饰关键字:static.const.extern.volatile.register static:(该变量保存在全局静态区) a.修饰局部变量--& ...
- sdut-1118 C语言实验——从大到小输出a、b、c(选择结构)
点击打开链接 C语言实验--从大到小输出a.b.c(选择结构) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Pr ...
- c语言自动按键脚本,C语言键盘控制走迷宫小游戏
本文实例为大家分享了C语言键盘控制走迷宫小游戏的具体代码,供大家参考,具体内容如下 在看了<啊哈C语言>之后想写一个游戏demo 游戏的截图 首先是启动界面 然后是初始化 接下来是键盘操控 ...
- 【iOS开发每日小笔记(一)】UIPickerView 自动选择某个component的某个row
这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己 ...
最新文章
- 强化学习应用于组合优化问题
- uva12716 n以内有多少对整数a、b满足(1≤b≤a)且gcd(a, b) = xor(a, b)
- python os.popen()方法(用于从一个命令打开一个管道)
- 苹果怎么换行打字_停课不停学!推荐苹果电脑学习类软件,丰富您的假期生活...
- Jar 打包 EXE文件,可以脱离java环境运行 Jsmooth的使用
- Battle Encoder Shirase一款能限制进程CPU占有率的小东西
- 为什么要使用getter/setter
- [转载] Python类属性、类方法和静态方法
- 模糊PI控制的Simulink仿真(保姆级别)
- 计算机上桌面不见了怎么找回,电脑桌面上的文件消失了怎么办,如何找回
- 越狱Season 1-Episode 9: Tweener
- 服务器中搭建OA系统,oa系统搭建在云服务器上
- iOS删除模拟器版本
- html中textarea标签的换行
- jQuery中常需引用的jquery.min.js文件的内容
- 解决typora beta版本过期提示
- 散列算法和数字签名笔记
- 机器学习 第三节 第八课
- 交叉熵损失函数(softmax分类器)
- 使用element-tiptap报错:Duplicate use of selection JSON ID cell